将GDB变量传递给从GDB执行的Shell命令

9
我希望您能够在gdb中执行一个shell命令,这个shell命令需要一个参数,而这个参数是一个gdb变量。如何使gdb在传递命令和参数到shell解释器之前解释这个变量呢?
例如,在gdb提示符下:
(gdb) set $my_arg = 2
(gdb) shell echo $my_arg

我希望这段代码能在标准输出上打印出数字2,但实际上它却打印了一个空行。
注:我正在使用不支持Python脚本的ndk-gdb。

你尝试过使用shell命令“echo $my_arg”或者'echo $my_arg'吗?(我对gdb不是很熟悉,这只是一个猜测) - Franko
是的,我试过了。它不起作用。 - carlodef
2个回答

13

使用新版本的gdb,您可以使用“eval”:

(gdb) set $val = 2
(gdb) eval "shell echo %d", $val
2

如果您使用的是较旧版本的gdb,则最佳方法是使用“set logging”将内容写入文件中,然后使用诸如sed之类的Shell实用程序将文件重写为所需格式。


这正是我在寻找的,谢谢!它适用于与Android NDK r8版本一起发货的gdb版本。 - carlodef
有人知道在lldb中是否有一种方法可以做到这一点吗? - quad16

6

更新 本答案不适用于ndk-gdb,仅适用于gdb。

似乎不能直接在shell命令中打印方便变量。但是,您可以使用gdb python来实现:

(gdb) set $my_arg = 2
(gdb) python gdb.execute("shell echo " + str(gdb.parse_and_eval("$my_arg")))
2
(gdb)

谢谢!它可以在标准版的gdb中工作。不幸的是,我正在使用ndk-gdb(即随Android NDK提供的gdb版本),并且该GDB副本不支持Python脚本。我将编辑我的问题以添加这个细节。 - carlodef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接