Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PythonGDB(gdb7.1)中从gdb.execute获取输出?_Python_Linux_Gdb_Dump - Fatal编程技术网

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

如何在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脚本的标准输入和输出

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

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

在GDB 7.1版中,最后一个参数似乎是这一行(GDB 7.1):

返回
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()