1

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

我有一个类,它有几个名为“el”的方法,其中一个需要两个ints。GDB 在断点处停止,_Dr在下级进程的作用域中调用了一个成员变量。我这样做是为了得到一个 Pythongdb.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.

这样做的正确方法是什么?

4

1 回答 1

1

最好的方法是遍历类型的字段,寻找你想要的。

就像是:

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

有关更多详细信息,请参阅 gdb 手册中的节点“Python 中的类型”。

于 2015-02-26T15:16:08.350 回答