测试是否定义了gdb便捷变量

时间:2010-09-19 04:52:52

标签: gdb

有没有办法测试是否在gdb中设置了一个方便变量?

例如:

(gdb) if $_exitcode == 0
 >quit
 >end
Invalid type combination in equality test.
(gdb) p $_exitcode
$1 = void

$_exitcodevoid,因为在程序终止之前不会设置它。最接近的可用构造是init-if-undefined,但这需要将变量设置为某个标记值并对其进行测试。

3 个答案:

答案 0 :(得分:4)

由于正常的进程退出代码介于0到255之间,我建议如下:

init-if-undefined $_exitcode = -1
if ($_exitcode != -1)
  quit
end

答案 1 :(得分:2)

我有同样的问题..你不能检查一个变量是否已经设置,如我在GDB中所知..你可以通过python运行它,可能,并让整个脚本以这种方式运行,但我不确定GDB中的python脚本是持久的还是一直在运行。 你可以做点什么..

init-if-undefined $_exitcode = 1
if $_exitcode == 0
quit
end
end

答案 2 :(得分:0)

您可以在gdb中定义一个命令来执行您想要的操作,如下所示:

(gdb) define CheckDefined
Type commands for definition of "CheckDefined".
End with a line saying just "end".
>set $CheckDefined_DefinedOr1 = $arg0
>init-if-undefined $CheckDefined_DefinedOr1 = 1
>set $CheckDefined_DefinedOr2 = $arg0
>init-if-undefined $CheckDefined_DefinedOr2 = 2
>set $arg1 = ($CheckDefined_DefinedOr1 == $CheckDefined_DefinedOr2)
>end

现在,您已经定义了CheckDefined,您可以如图所示使用它来检查是否定义了给定的便利变量,在本例中为$ fluffy,并将检查结果存储在$ fluffyIsDefined中:

(gdb) CheckDefined $fluffy $fluffyIsDefined
(gdb) print $fluffyIsDefined
$17 = 0

如果您现在定义以前未定义的变量$ fluffy,则CheckDefined将产生不同的结果:

(gdb) set $fluffy = 92
(gdb) CheckDefined $fluffy $fluffyIsDefined
(gdb) print $fluffyIsDefined
$18 = 1

此功能的使用优点是您不必浪费要检查的变量。因此,重写您的原始构造:

(gdb) CheckDefined $_exitcode $exitCodeIsDefined
(gdb) if (! $exitCodeIsDefined)
 >quit
 >end