如何将变量从 GDB 传递给调用的 python 解释器
how to pass variables from GDB to invoked python interpeter
从某些版本的 GDB(我猜是 7 左右)可以以交互或非交互方式从 GDB 调用 python。
这里有一些例子:
(gdb) python print("gdb".capitalize())
Gdb
(gdb)
是否可以将 GDB 中使用的变量传递给 Python?我尝试过类似的方法,但没有成功:
尝试传递名为 c_variable
的 C 变量
(gdb) python print(c_variable.capitalize())
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'c_variable' is not defined
Error while executing Python code.
尝试传递名为 $1 的 GDB 变量
(gdb) python print(.capitalize())
File "<string>", line 1
print(.capitalize())
^
SyntaxError: invalid syntax
Error while executing Python code.
编辑
几乎在我提出问题后我发现了这个问题passing c++ variables to python via gdb
所以我得到了以下结果:
(gdb) whatis p_char
type = char *
(gdb) ptype p_char
type = char *
(gdb) p p_char
= 0x8002004 "hello world"
(gdb) python x=str(gdb.parse_and_eval('p_char')); print(x.split(" "))
['0x8002004', '"hello', 'world"']
这是我可以使用的东西,但我需要做一些额外的清理工作(删除引号、地址等),有没有更好的方法?而且我仍然不知道是否可以通过
.
Try to pass C variable named c_variable
Try to pass GDB's variable named
py print(gdb.parse_and_eval("c_variable"))
py print(gdb.parse_and_eval(""))
如果您想使用 Python 和 GDB,我强烈建议您阅读 this. Of special interest to you would be this page that includes parse_and_eval
as well as this page on values。
gdb.parse_and_eval
函数returns一个gdb.Value
对象。对于字符串值,您可以使用 string
方法,因此:
(gdb) python print(gdb.parse_and_eval("string_var").string())
Hello World
(gdb) python print(gdb.parse_and_eval("string_var").string()[::-1])
dlroW olleH
从某些版本的 GDB(我猜是 7 左右)可以以交互或非交互方式从 GDB 调用 python。
这里有一些例子:
(gdb) python print("gdb".capitalize())
Gdb
(gdb)
是否可以将 GDB 中使用的变量传递给 Python?我尝试过类似的方法,但没有成功:
尝试传递名为 c_variable
的 C 变量(gdb) python print(c_variable.capitalize())
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'c_variable' is not defined
Error while executing Python code.
尝试传递名为 $1 的 GDB 变量
(gdb) python print(.capitalize())
File "<string>", line 1
print(.capitalize())
^
SyntaxError: invalid syntax
Error while executing Python code.
编辑
几乎在我提出问题后我发现了这个问题passing c++ variables to python via gdb
所以我得到了以下结果:
(gdb) whatis p_char
type = char *
(gdb) ptype p_char
type = char *
(gdb) p p_char
= 0x8002004 "hello world"
(gdb) python x=str(gdb.parse_and_eval('p_char')); print(x.split(" "))
['0x8002004', '"hello', 'world"']
这是我可以使用的东西,但我需要做一些额外的清理工作(删除引号、地址等),有没有更好的方法?而且我仍然不知道是否可以通过 .
Try to pass C variable named c_variable
Try to pass GDB's variable named
py print(gdb.parse_and_eval("c_variable"))
py print(gdb.parse_and_eval(""))
如果您想使用 Python 和 GDB,我强烈建议您阅读 this. Of special interest to you would be this page that includes parse_and_eval
as well as this page on values。
gdb.parse_and_eval
函数returns一个gdb.Value
对象。对于字符串值,您可以使用 string
方法,因此:
(gdb) python print(gdb.parse_and_eval("string_var").string())
Hello World
(gdb) python print(gdb.parse_and_eval("string_var").string()[::-1])
dlroW olleH