当char * x指向一个值为“hello”的string时,如何在gdb中设置条件断点?

我可以指定,当char* x指向值为"hello"的string时,我希望gdb在第x行中断? 如果是的话,怎么样?

你可以使用strcmp

 break x:20 if strcmp(y, "hello") == 0 

20是行号, x可以是任何文件名, y可以是任何variables。

 break x if ((int)strcmp(y, "hello")) == 0 

在一些实现上,gdb可能不知道strcmp的返回types。 这意味着你将不得不施放,否则将永远评估为真!

由于GDB 7.5,你可以使用这些方便的便利function :

 $_memeq(buf1, buf2, length)` $_streq(str1, str2) $_strlen(str) $_regex(str, regex) 

似乎没有什么问题比在每次命中断点时在进程堆栈上执行一个“外部” strcmp()

注意你的GDB需要用Python支持进行编译,这对当前的Linux发行版来说不是问题。 可以肯定的是,你可以通过在GDB里运行show configuration并search--with-python来检查它。 这个小小的打线程也是这样的:

 $ gdb -n -quiet -batch -ex 'show configuration' | grep 'with-python' --with-python=/usr (relocatable) 

对于你的演示案例,用法是

 break <where> if $_streq(x, "hello") 

或者,如果你的断点已经存在,你只是想添加条件

 condition <breakpoint number> $_streq(x, "hello") 

$_streq只匹配整个string,所以如果你想要更狡猾的东西,你应该使用$_regex ,它支持Python的正则expression式语法 。