我可以指定我希望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的返回类型。这意味着您必须施放,否则它将始终评估为真!

由于GDB 7.5 您可以使用这些方便 便利功能:

$_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正则表达语法.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top