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

Debugging 如何比较GDB中存储的字符串变量?,debugging,gdb,Debugging,Gdb,在GDB中有一个名为x的变量,我想将它与字符串进行比较 gdb $ print $x $1 = 0x1001009b0 "hello" 但是与 if $x == "hello" 不起作用。正如@tlwhitec指出的: 您还可以使用内置的$\u streq(str1、str2)功能: (gdb) p $_streq($x, "hello") 此函数不要求GDB配置Python支持, 这意味着它们总是可用的 在中可以找到更方便的功能。 或使用 打印所有便利功能的列表 对于缺少内置$\u s

在GDB中有一个名为x的变量,我想将它与字符串进行比较

gdb $ print $x
$1 = 0x1001009b0 "hello"
但是与

if $x == "hello"
不起作用。

正如@tlwhitec指出的: 您还可以使用内置的
$\u streq(str1、str2)
功能:

(gdb) p $_streq($x, "hello")
此函数不要求GDB配置Python支持, 这意味着它们总是可用的

在中可以找到更方便的功能。 或使用

打印所有便利功能的列表


对于缺少内置
$\u 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
或:


这仅在调试正在运行的进程时有效,但在调试核心转储时无效。(非运行调试的替代方案显然是在编辑中添加的。)有了python支持,您还可以使用内部
$\u streq(str1,str2)
函数:
(gdb)p$\u streq($x,“hello”)这个可能比这个答案被添加的时间晚,我可以在GD7.7.7中看到它与C++字符串相关:
(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