如何在PythonGDB(gdb7.1)中从gdb.execute获取输出?
我目前正在编写Python GDB脚本。问题是它必须与GDB7.1兼容。因此,我首先为GDB 7.3.1编写了脚本,并使用以下函数接收GDB命令(GDB 7.3.1)的输出: 这个函数的最后一个参数是,它应该以字符串形式返回结果(这很有意义;否则我为什么要执行这样的命令;) 在GDB 7.1版中,最后一个参数似乎是这一行(GDB 7.1): 返回如何在PythonGDB(gdb7.1)中从gdb.execute获取输出?,python,linux,gdb,dump,Python,Linux,Gdb,Dump,我目前正在编写Python GDB脚本。问题是它必须与GDB7.1兼容。因此,我首先为GDB 7.3.1编写了脚本,并使用以下函数接收GDB命令(GDB 7.3.1)的输出: 这个函数的最后一个参数是,它应该以字符串形式返回结果(这很有意义;否则我为什么要执行这样的命令;) 在GDB 7.1版中,最后一个参数似乎是这一行(GDB 7.1): 返回None 是否有机会检索此命令的输出?我已经尝试将python脚本的标准输出重定向到一个文件中,然后加载这个文件,但显然python脚本的标准输入和输出
None
是否有机会检索此命令的输出?我已经尝试将python脚本的标准输出重定向到一个文件中,然后加载这个文件,但显然python脚本的标准输入和输出是这样的,因此gdb.execute命令的输出不会写入我的文件
我现在唯一能想到的就是用bash脚本来包装我的脚本,该脚本首先用执行各种命令的python脚本打开gdb,然后通过管道将其传输到文件中。然后再次打开gdb,但使用另一个python脚本加载文件,解析文件,然后根据文件的输入执行其他命令,依此类推。但这确实是我能想到的最丑陋的解决方案
那么,在GDB7.1中有没有一种方法可以接收gdb.execute的输出呢
那么,在GDB7.1中有没有一种方法可以接收gdb.execute的输出呢
没有
您的最佳选择是安排GDB-7.3可用。由于GDB通常不使用共享库(除了libc和libpython之外),所以您可以用脚本复制GDB二进制文件。这将比您提出的备选方案更容易维护。您可以先写入文件,然后读取文件,例如:
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的旧版本还是非常优秀。fyinow(使用gdb 8.1测试)您可以使用to_字符串
参数
gdb.execute(命令[,from_tty[,to_string]])
默认情况下,由命令生成的任何输出都被发送到GDB的标准输出(如果日志记录已打开,则发送到日志输出)。如果to_string参数为True,则输出将由gdb.execute收集并作为字符串返回。默认值为False,在这种情况下,返回值为None
myvar = gdb.execute("info target", False)
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()