1

我有一个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返回状态并使用它来控制加载新的二进制输出?

4

1 回答 1

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 命令的输出,这会变得有点麻烦。

于 2017-12-19T16:29:27.660 回答