繁体   English   中英

当 char* x 指向值等于“hello”的字符串时,如何在 gdb 中设置条件断点?

[英]How do I set a conditional breakpoint in gdb, when char* x points to a string whose value equals “hello”?

char* x指向值等于"hello"的字符串时,我可以指定我希望 gdb 在第 x 行中断吗? 如果是,如何?

您可以使用strcmp

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

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

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

在某些实现中,gdb 可能不知道 strcmp 的返回类型。 这意味着您必须强制转换,否则它将始终评估为 true!

使用带有$_streq中断条件(GDB 自己的便利函数之一):

break [where] if $_streq(x, "hello")

或者,如果您的断点已存在,则向其添加条件:

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

从 GDB 7.5(很久以前)开始,您可以使用它和一些其他原生便利函数来进行各种字符串匹配,包括支持Python 正则表达式语法的$_regex

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

与必须执行注入进程堆栈的通常strcmp()相比,这些问题要少得多,因为这可能会产生不希望的副作用。

唉,使用本机函数并不总是可行的,因为它们依赖于使用 Python 支持编译的 GDB。 这通常是默认设置,但某些受限环境可能没有它。 可以肯定的是,您可以通过在 GDB 中运行show configuration并搜索--with-python来检查它。 这个 shell oneliner 也可以解决这个问题:

gdb -n -quiet -batch -ex 'show configuration' | grep 'with-python'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM