假设我创建了一个 gdb 用户定义命令,如下所示:
define pfoo
call foo_printer($arg0)
end
wherefoo_printer
接受一个指针参数。然后,如果我有一个指针变量pf
,我可以这样做:
pfoo pf
但是如果我有一个非指针变量f
,我需要记住提供&
:
pfoo &f
有没有办法定义命令以使用指针或非指针参数?即,所以这两个都可以工作:
pfoo pf
pfoo f
假设我创建了一个 gdb 用户定义命令,如下所示:
define pfoo
call foo_printer($arg0)
end
wherefoo_printer
接受一个指针参数。然后,如果我有一个指针变量pf
,我可以这样做:
pfoo pf
但是如果我有一个非指针变量f
,我需要记住提供&
:
pfoo &f
有没有办法定义命令以使用指针或非指针参数?即,所以这两个都可以工作:
pfoo pf
pfoo f
作为 GDB Python API 的新手,这就是我想出的:
class FooPrinter (gdb.Command):
"""Print a FOO (pointer or not, may be nil)"""
def __init__(self):
super(FooPrinter, self).__init__("pfoo", gdb.COMMAND_USER)
def invoke(self, foo, from_tty):
gdb_foo = gdb.parse_and_eval(foo)
if gdb_foo.type.code == gdb.TYPE_CODE_PTR:
if not gdb_foo.address:
gdb.write("<nil>\n")
else:
gdb.execute("call foo_printer(" + foo + ")")
else:
gdb.execute("call foo_printer(&" + foo + ")")
FooPrinter()
(然后在 . 中获取该文件.gdbinit
。)
请让我知道这是否可以改进。