我有一个gdb
函数,在gdbinit
文件中定义:
define myfunc
set $retval = SOMEHOW_RET_VALUE_OF shell my-shell-command
if $retval == 0
load my-output
else
echo command not succeeded, not doing anything.\n
end
end
如何获得my-shell-func
返回状态并使用它来控制加载新的二进制输出?
答案 0 :(得分:2)
有两种方法可以做到这一点。
最简单的方法是使用gdb的内置Python脚本功能。对于上述情况,您可以编写一个新的便利功能,可以执行您喜欢的操作。这里的便利函数是合适的,因为它可以直接用在表达式中。
要编写便利功能,请查看gdb.Function
的文档。
然后你会像:
一样使用它set $retval = $_shellcommand("shell command")
如果你不想深入Python,还有一种方法;虽然有点痛苦。
对于一个简单的shell命令,我们的想法是将shell命令的退出状态写入gdb脚本文件,然后将其源代码:
(gdb) shell false; echo "set \$retval = $?" > /tmp/q
(gdb) source /tmp/q
(gdb) print $retval
$1 = 1
如果你想要的不仅仅是退出状态,或者你想在计算中使用gdb命令的输出,这会变得有点毛茸茸。