为什么 "condition" 和 "break" 的语法在 gdb 中不同?
why is the syntax for "condition" and "break" different in gdb?
我似乎对 gdb 有疑问。假设我使用命令
在 i 的循环中创建了一个条件断点
break file.cpp:line_no if i==120
一切都很好,它创建了断点 3,代码在 i==120 时中断。现在我在 i==495 处遇到问题,我想重新使用相同的断点,所以我使用:
condition 3 if i==495
好吧,我在 `if i==495' 附近遇到“表达式语法错误所以我尝试:
condition 3 i==495
没有更多错误,断点的信息看起来很有希望:
3 breakpoint keep y <MULTIPLE>
stop only if i==495
但是到达条件后并没有在断点处停止。所以我开始写这个问题,然后我想到尝试:
condition 3 "if i == 495"
太棒了!所以我想我的问题是: 1. 为什么两个命令之间的语法不同?和 2. 为什么信息如此混乱?新信息说 'if "if i==495"',但如果 'i==495' 评估为真,那不应该只评估为真吗?
你最后一次尝试并没有按照你认为的去做。当你写:
cond 3 "if i == 495"
条件实际上是字符串常量"if i == 495",它永远不会为假。所以,断点停止。
您可以通过执行 print i
(对于某些点击它不会是 495)或 cond 3 "anything goes here!"
.
来查看此信息
第二次尝试语法正确:
cond 3 i == 495
我不能说为什么这对你没有触发。
如果您使用 gdb 调试 fortran,则在尝试合理的命令时可能会出现语法错误:
(gdb) b foo.f:10 if i == 0
A syntax error in expression, near `= 0'.
原因是您必须对逻辑运算符使用 old-style fortran 语法(.eq.
而不是 ==
等等):
(gdb) b foo.f:10 if i .eq. 0
Breakpoint 1 at 0x432738: file foo.f, line 10.
我似乎对 gdb 有疑问。假设我使用命令
在 i 的循环中创建了一个条件断点 break file.cpp:line_no if i==120
一切都很好,它创建了断点 3,代码在 i==120 时中断。现在我在 i==495 处遇到问题,我想重新使用相同的断点,所以我使用:
condition 3 if i==495
好吧,我在 `if i==495' 附近遇到“表达式语法错误所以我尝试:
condition 3 i==495
没有更多错误,断点的信息看起来很有希望:
3 breakpoint keep y <MULTIPLE>
stop only if i==495
但是到达条件后并没有在断点处停止。所以我开始写这个问题,然后我想到尝试:
condition 3 "if i == 495"
太棒了!所以我想我的问题是: 1. 为什么两个命令之间的语法不同?和 2. 为什么信息如此混乱?新信息说 'if "if i==495"',但如果 'i==495' 评估为真,那不应该只评估为真吗?
你最后一次尝试并没有按照你认为的去做。当你写:
cond 3 "if i == 495"
条件实际上是字符串常量"if i == 495",它永远不会为假。所以,断点停止。
您可以通过执行 print i
(对于某些点击它不会是 495)或 cond 3 "anything goes here!"
.
第二次尝试语法正确:
cond 3 i == 495
我不能说为什么这对你没有触发。
如果您使用 gdb 调试 fortran,则在尝试合理的命令时可能会出现语法错误:
(gdb) b foo.f:10 if i == 0
A syntax error in expression, near `= 0'.
原因是您必须对逻辑运算符使用 old-style fortran 语法(.eq.
而不是 ==
等等):
(gdb) b foo.f:10 if i .eq. 0
Breakpoint 1 at 0x432738: file foo.f, line 10.