考虑以下输出相同文本字符串的gdb命令。
(gdb) print foo
(gdb) python print(gdb.lookup_symbol('foo'))
在这种情况下,gdb.lookup_symbol()
按预期返回gdb.Value()
个实例,其字符串化等效于默认的gdb字符串化。
但现在考虑以下同等情况:
(gdb) print *&foo
*&
是一个noop,但尝试使用gdb.lookup_symbol('*&foo')
不起作用。所以我的问题是,是否有可能从python中使用gdb的命令行解除引用解析器,然后获得gdb.Value
作为回报?
答案 0 :(得分:2)
尝试使用gdb.lookup_symbol('*& foo')不起作用。
那是因为二进制文件中没有名为*&foo
的符号。
是否可以从python中使用gdb的命令行解引用解析器,然后获得gdb.Value作为回报?
您的问题不是很明确,但我认为您要求parse_and_eval:
Function: gdb.parse_and_eval (expression)
Parse expression, which must be a string, as an expression in the current language,
evaluate it, and return the result as a gdb.Value.
This function can be useful when implementing a new command (see Commands In Python),
as it provides a way to parse the command’s argument as an expression.
It is also useful simply to compute values, for example, it is the only way to get
the value of a convenience variable (see Convenience Vars) as a gdb.Value.