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"。
如何使用 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"。