有没有办法测试是否在gdb中设置了一个方便变量?
例如:
(gdb) if $_exitcode == 0 >quit >end Invalid type combination in equality test. (gdb) p $_exitcode $1 = void
$_exitcode
为void
,因为在程序终止之前不会设置它。最接近的可用构造是init-if-undefined
,但这需要将变量设置为某个标记值并对其进行测试。
答案 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