【发布时间】:2019-03-16 04:08:16
【问题描述】:
有没有办法测试 gdb 中是否设置了便利变量?
例如:
(gdb) 如果 $_exitcode == 0 >退出 >结束 相等测试中的类型组合无效。 (gdb) p $_exitcode $1 = 无效$_exitcode 是 void,因为直到程序终止才设置它。最接近的可用构造是 init-if-undefined,但这需要将变量设置为某个标记值并针对该值进行测试。
【问题讨论】:
标签: gdb
有没有办法测试 gdb 中是否设置了便利变量?
例如:
(gdb) 如果 $_exitcode == 0 >退出 >结束 相等测试中的类型组合无效。 (gdb) p $_exitcode $1 = 无效$_exitcode 是 void,因为直到程序终止才设置它。最接近的可用构造是 init-if-undefined,但这需要将变量设置为某个标记值并针对该值进行测试。
【问题讨论】:
标签: gdb
由于正常的进程退出代码介于 0 到 255 之间,我建议如下:
init-if-undefined $_exitcode = -1
if ($_exitcode != -1)
quit
end
【讨论】:
我有同样的问题..据我所知,您无法检查是否已设置变量在 GDB 中..您可能可以通过 python 运行它,并让整个脚本以这种方式运行,但我不确定 GDB 中的 python 脚本是持久的还是一直在运行。 你可以做类似的事情..
init-if-undefined $_exitcode = 1
if $_exitcode == 0
quit
end
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
【讨论】: