如何在PythonGDB(GDB 7.1)中从gdb.execute获取输出?

问题描述 投票:6回答:3

我目前正在编写Python GDB脚本。问题在于它必须与GDB 7.1兼容。因此,我首先为GDB 7.3.1编写了脚本,并使用以下函数接收gdb命令(GDB 7.3.1)的输出:

myvar = gdb.execute("info target", False, True)

此函数的最后一个参数是它应该以字符串形式返回结果(这很有意义;为什么还要执行这样的命令;))]

虽然在GDB版本7.1中,但似乎最后一个参数isn't available因此这一行(GDB 7.1):

myvar = gdb.execute("info target", False)

返回None

是否有机会检索此命令的输出?我已经尝试过将python脚本的标准输出重定向到一个文件中,然后加载该文件,但是显然我的python脚本的标准输入和输出是overwritten by the gdb environment,因此gdb.execute命令的输出不会写入到我的文件中。文件。

我现在唯一想到的就是用bash脚本包装我的脚本,该bash脚本首先使用执行各种命令的python脚本打开gdb,然后将其通过管道传输到文件中。然后再次打开gdb,但使用另一个python脚本加载该文件,对其进行解析,然后根据文件中的输入执行其他命令,依此类推。但这是我能想到的最丑陋的解决方案。

那么有没有办法在GDB 7.1中接收gdb.execute的输出?

python linux gdb dump
3个回答
5
投票

那么有没有办法在GDB 7.1中接收gdb.execute的输出?

编号

您最好的选择是安排GDB-7.3上市。由于GDB通常不使用共享库(除了libc可能还有libpython之外),因此您只需使用脚本复制gdb二进制文件即可。与您提出的替代方案相比,这将是更容易且更可维护的解决方案。


2
投票

您可以写入文件,然后读取文件,例如:

os.system("rm tmp.txt")
gdb.execute("set logging file tmp.txt")
gdb.execute("set logging on")
mainsec=gdb.execute("info proc mappings")
gdb.execute("set logging off")
mainsec = open("tmp.txt").read()

尽管旧版本的gdb.execute优越得多。


0
投票

现在供您参考(已通过gdb 8.1测试),您可以使用to_string参数

https://sourceware.org/gdb/onlinedocs/gdb/Basic-Python.html

gdb.execute (command [, from_tty [, to_string]])

默认情况下,命令产生的任何输出都会发送到GDB的标准输出(如果打开了日志记录,还会发送到日志输出)。如果to_string参数为True,则输出将由gdb.execute收集并作为字符串返回。默认值为False,在这种情况下,返回值为None。

© www.soinside.com 2019 - 2024. All rights reserved.