如何在gdbinit函数中有条件地执行命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在gdbinit函数中有条件地执行命令相关的知识,希望对你有一定的参考价值。

我有一个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.

    end 
end 

如何获取my-shell-func返回状态并使用它来控制加载新的二进制输出?

答案

有两种方法可以做到这一点。

最简单的方法是使用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命令的输出,这会变得有点毛茸茸。

以上是关于如何在gdbinit函数中有条件地执行命令的主要内容,如果未能解决你的问题,请参考以下文章

跟踪所有变量以执行gdb中的函数

如何有条件地将 C 代码片段编译到我的 Perl 模块?

如何在created()或mounted()中有条件地呈现JS

在 for 循环中的异步函数调用中有条件地执行回调

Laravel 5.8 有条件地插入 sql 片段

如何在 oracle 中有条件地执行 DDL?