gdb-customize命令,如何测试变量是否设置?

gdb-customize命令,如何测试变量是否设置?

我正在使用 gdb 进行调试,需要定义一些辅助命令。基本上我希望我的自定义命令根据给定的参数数量进行不同的操作。

所以我要测试一下是否$arg*给出,参见下面的代码:

define pgdir

    set $pgdir = $arg0

    if ($arg1) {
        // show the corresponding PDE
    } else {
        // show the whole page directory
    }

end

是否可以测试变量是否为 void?

答案1

您可以使用便利功能 $_isvoid()。如果变量为空,则返回 1。

(gdb) set $v = 1
(gdb) print $_isvoid($v)
$1 = 0
(gdb) print $_isvoid($v2)
$2 = 1

答案2

gdb支持$argc根据手册扩展到 0..10 的范围,所以在你的情况下它可能是

define pgdir
  if $argc == 2
    ...
  else
    ...
  end
end

答案3

至于我的问题,有一个$argc变量可以让我这样做:

define pgdir

    set $pgdir = $arg0

    if ($argc == 1) {
        // show the corresponding PDE
    } else {
        // show the whole page directory
    }

end

至于问题如何测试变量是否为void,我想到了一个棘手且不优雅的方法:测试变量是否等于具有 void 值的变量

define func

    if ($var_to_test == $var_that_no_one_is_like_to_use_so_that_it_is_void)
        // do something

end

相关内容