0

假设我创建了一个 gdb 用户定义命令,如下所示:

define pfoo
call foo_printer($arg0)
end

wherefoo_printer接受一个指针参数。然后,如果我有一个指针变量pf,我可以这样做:

pfoo pf

但是如果我有一个非指针变量f,我需要记住提供&

pfoo &f

有没有办法定义命令以使用指针或非指针参数?即,所以这两个都可以工作:

pfoo pf
pfoo f
4

1 回答 1

0

作为 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。)

请让我知道这是否可以改进。

于 2021-01-13T02:43:59.340 回答