如何比较GDB中存储的字符串变量?

时间:2011-09-14 22:07:57

标签: debugging gdb

我在GDB中有一个名为x的变量,我希望将其与字符串进行比较。

gdb $ print $x
$1 = 0x1001009b0 "hello"

但与

进行比较
if $x == "hello"

不起作用。

1 个答案:

答案 0 :(得分:21)

正如@tlwhitec指出: 您还可以使用内置的$_streq(str1, str2)函数:

(gdb) p $_streq($x, "hello")

此函数不需要使用Python支持配置GDB, 这意味着它们始终可用。

https://sourceware.org/gdb/onlinedocs/gdb/Convenience-Funs.html中可以找到更方便的功能。 或者使用

(gdb) help function

打印所有便利功能的列表。


对于缺少内置$_streq函数的旧gdb,   您可以定义自己的比较

(gdb) p strcmp($x, "hello") == 0
$1 = 1

如果你不幸没有运行程序(执行核心文件或其他东西),如果你的gdb足够新用python,你可以做一些以下的效果:

(gdb) py print cmp(gdb.execute("output $x", to_string=True).strip('"'), "hello") == 0
True

或:

(gdb) define strcmp
>py print cmp(gdb.execute("output $arg0", to_string=True).strip('"'), $arg1)
>end
(gdb) strcmp $x "hello"
0