如何在 gdbinit 函数中有条件地执行命令
How to execute commands conditionally in gdbinit functions
我有一个 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
return 状态并使用它来控制加载新的二进制输出?
有两种方法可以做到这一点。
最简单的方法是使用 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
如果您想要的不仅仅是退出状态,或者如果您想要在计算中使用 gdb 命令的输出,这会有点麻烦。
我有一个 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
return 状态并使用它来控制加载新的二进制输出?
有两种方法可以做到这一点。
最简单的方法是使用 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
如果您想要的不仅仅是退出状态,或者如果您想要在计算中使用 gdb 命令的输出,这会有点麻烦。