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

测试是否定义了gdb便利变量,gdb,Gdb,是否有办法测试gdb中是否设置了便利变量? 例如: (gdb) if $_exitcode == 0 >quit >end Invalid type combination in equality test. (gdb) p $_exitcode $1 = void (gdb)如果$\u exitcode==0 >退出 >结束 相等性测试中的类型组合无效。 (gdb)p$\u exitcode $1=无效 $\u exitcode是void,因为在程序终止之前它不会被设置。最接近的可用构造是

是否有办法测试gdb中是否设置了便利变量?

例如:

(gdb) if $_exitcode == 0 >quit >end Invalid type combination in equality test. (gdb) p $_exitcode $1 = void (gdb)如果$\u exitcode==0 >退出 >结束 相等性测试中的类型组合无效。 (gdb)p$\u exitcode $1=无效
$\u exitcode
void
,因为在程序终止之前它不会被设置。最接近的可用构造是,但这需要将变量设置为某个sentinel值,并根据该值进行测试。

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

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

由于正常进程退出代码介于0和255之间,我建议执行以下操作:

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

您可以在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