如何评估用于gdb监视器命令的表达式?

时间:2015-03-12 11:33:20

标签: gdb monitor

在脚本化的gdb会话中,我想使用monitor <cmd>,其中cmd应包含符号的地址。例如:

monitor foobar &myVariable

应该成为:

monitor foobar 0x00004711

因为远程端无法评估表达式。无论我尝试什么,都会发送字符串“&amp; myVariable”而不是地址。

我玩了便利变量和东西,但这是我找到的唯一解决方法:

# write the command into a file and execute this file
# didn't find a direct way to include the address into the monitor command
set logging overwrite on
set logging on command.tmp
printf "monitor foobar 0x%08x\n", &myVariable
set logging off
source command.tmp

有任何想法以更优雅的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

执行此操作的最简单方法是使用gdb eval命令,该命令是为此目的而引入的。它有点像printf

(gdb) eval "monitor foobar %p", &myVariable

(我实际上没有尝试过,所以要小心。)

如果你的gdb没有eval,那么它就是旧的一面。我建议升级。

如果您无法升级,那么您也可以使用Python编写脚本。

如果你的gdb没有Python,那么它要么很旧(升级!),要么在没有Python支持的情况下编译(重新编译!)。

如果你无法获得这些功能中的任何一个,那么我恐怕会写出一个脚本并source它&#34;方法就是剩下的。