char* x
当指向值等于的字符串时,我可以指定我希望 gdb 在第 x 行中断"hello"
吗?如果是,如何?
问问题
145145 次
3 回答
217
您可以使用strcmp
:
break x:20 if strcmp(y, "hello") == 0
20
是行号,x
可以是任何文件名,y
也可以是任何变量。
于 2010-11-15T11:27:15.077 回答
68
使用 带有(GDB 自己的便利功能之一)的中断条件:$_streq
break [where] if $_streq(x, "hello")
或者,如果您的断点已经存在,请向其中添加条件:
condition <breakpoint number> $_streq(x, "hello")
自 GDB 7.5(很久以前)以来,您可以使用它和一些其他本机便利函数来进行各种字符串匹配,包括$_regex
支持Python 正则表达式语法:
$_memeq(buf1, buf2, length)
$_regex(str, regex)
$_streq(str1, str2)
$_strlen(str)
这些问题比必须执行通常strcmp()
注入进程堆栈的问题要小得多,因为这可能会产生不希望的副作用。
唉,使用本机函数并不总是可行的,因为它们依赖于使用 Python 支持编译的 GDB。这通常是默认设置,但某些受限环境可能没有它。可以肯定的是,您可以通过show configuration
在 GDB 中运行并搜索--with-python
. 这个 shell oneliner 也可以解决问题:
gdb -n -quiet -batch -ex 'show configuration' | grep 'with-python'
于 2017-05-10T12:46:33.040 回答
58
break x if ((int)strcmp(y, "hello")) == 0
在某些实现中,gdb 可能不知道 strcmp 的返回类型。这意味着你必须强制转换,否则它总是会评估为真!
于 2012-03-22T09:16:46.537 回答