GDB Python 解析重载方法

GDB Python resolve overloaded method

如何使用 python 接口在 GDB 中查找重载方法?

我有一个 class,它有几个称为 'el' 的方法,其中一个需要两个 int。 GDB 在断点处停止,在下级进程的范围内有一个名为 _Dr 的成员变量。我这样做是为了得到一个 Python gdb.Value 对象代表 _Dr:

(gdb) python _Dr = gdb.parse_and_eval('_Dr')

现在我想获取el(int,int)方法:

(gdb) python el = _Dr['el']
Traceback (most recent call last):
  File "<string>", line 1, in <module>
gdb.error: cannot resolve overloaded method `el': no arguments supplied
Error while executing Python code.

如何告诉它参数的类型以解决重载问题?

我试过这个:

(gdb) python el = _Dr['el(int,int)']
Traceback (most recent call last):
  File "<string>", line 1, in <module>
gdb.error: There is no member or method named el(int,int).
Error while executing Python code.

还有这个:

(gdb) python el = _Dr['el', 'int', 'int']
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: Could not convert Python object: ('el', 'int', 'int').
Error while executing Python code.

还有这个:

(gdb) python el = _Dr['el(1,1)']
Traceback (most recent call last):
  File "<string>", line 1, in <module>
gdb.error: There is no member or method named el(1,1).
Error while executing Python code.

正确的做法是什么?

执行此操作的最佳方法是遍历类型的字段,寻找您想要的字段。

类似于:

for field in _Dr.type.fields():
  if field.name == 'el':
    ... check field.type here ...

有关详细信息,请参阅 gdb 手册中的节点 "Types in Python"。