当char* x指向值等于“ hello”的字符串时,如何在GDB中设置有条件的断点?
-
10-10-2019 - |
题
我可以指定我希望GDB在x行中打破 char* x
指向一个值等于的字符串 "hello"
?如果是,怎么样?
解决方案
您可以使用 strcmp
:
break x:20 if strcmp(y, "hello") == 0
20
是行号, x
可以是任何文件名,并且 y
可以是任何变量。
其他提示
break x if ((int)strcmp(y, "hello")) == 0
在某些实现中,GDB可能不知道strCMP的返回类型。这意味着您必须施放,否则它将始终评估为真!
$_memeq(buf1, buf2, length)`
$_streq(str1, str2)
$_strlen(str)
$_regex(str, regex)
似乎比执行“外国”要小得多 strcmp()
每次点击断点时,在过程中堆叠。
请注意,您的GDB需要在Python支持下进行编译,这不是当前Linux发行版的问题。可以肯定的是,您可以通过运行检查
show configuration
内部GDB并搜索--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
仅与整个字符串匹配,因此,如果您想要更狡猾的东西,则应使用 $_regex
, ,支持 python正则表达语法.
不隶属于 StackOverflow