我对 gdb 中的条件断点很困惑。
最近,我想在 C++ 程序中放置一个断点,当特定变量等于“foo”时中断。
为此,我在 gdb CLI 中输入了以下内容:
break LINE_NUMBER if strcmp(myVar, "foo") == 0
但我花了很长时间和很多尝试才找到如何编码。
我首先开始:
break LINE_NUMBER if myVar == "foo"
break LINE_NUMBER if myVar.c_str() == "foo"
...
在我最终发现条件断点之前MAY必须用C语言编程。
有人知道编写条件断点的规则写在哪里吗?
我已阅读文档,但没有找到我需要的信息...
https://sourceware.org/gdb/current/onlinedocs/gdb.html/Conditions.html#Conditions
文档明确指出条件是编程语言中的布尔表达式:
您还可以指定断点的条件。一个条件是 只是编程语言中的布尔表达式(请参阅 表达式)。
您的程序是用 C++ 编写的,因此理论上任何有效的 C++ 布尔表达式都应该有效。但实际上,GDB 对 C++ 表达式的支持有限,只有其中的某些子集有效,
strcmp(myVar, "foo") == 0
是有效的示例之一。您可以在GDB Wiki 上的表达式评估上找到一些需要改进的地方。