gdb Python脚本:`parse_and_eval`去哪了?

3 投票
2 回答
2876 浏览
提问于 2025-04-15 19:26

我之前写了一些Python脚本,帮助我在使用GDB调试时进行排错。这些脚本用到了一个叫做 gdb.parse_and_eval 的函数(现在还在文档里),这个函数可以让我从传给脚本命令的参数中获取一些内部值。但是现在这个模块里似乎找不到这个函数了。我在GDB里运行 python import gdb; print dir(gdb),结果显示这个函数不见了。

我是在GDB 6.8的 archer 分支上写的这些脚本,现在我找不到关于这个函数是否被弃用或者在GDB 7中发生了什么的信息。

有没有人知道这方面的情况?

谢谢!

2 个回答

4

parse_and_eval这个功能在Archer分支上进行了检查,但在7.0版本发布之前没有合并到主线代码中。现在已经合并了:

2009-12-03  Tom Tromey  <tromey@redhat.com>

        * python/python.c (gdbpy_parse_and_eval): New function.
        (GdbMethods): Add "parse_and_eval".

并将在即将发布的7.1版本中提供。

4

我不知道这个东西去哪了或者为什么会这样,但Qt在他们的代码里实现了一个解决办法,你可以在这里找到:他们的代码,这个解决办法可能对你有用:

def parseAndEvaluate(exp):
        if gdb.VERSION.startswith("6.8.50.2009"):
            return gdb.parse_and_eval(exp)
        # Work around non-existing gdb.parse_and_eval as in released 7.0
        gdb.execute("set logging redirect on")
        gdb.execute("set logging on")
        gdb.execute("print %s" % exp)
        gdb.execute("set logging off")
        return gdb.history(0)

撰写回答