我似乎遇到了gdb的问题。假设我使用命令
在循环中创建条件断点 break file.cpp:line_no if i==120
一切都很好,它会创建断点3,当i == 120时代码会中断。现在我在i == 495遇到问题,我想重新使用相同的断点,所以我使用:
condition 3 if i==495
好吧,我在'if = = 495'附近的表达式中出现“语法错误”所以我尝试了:
condition 3 i==495
没有更多错误,断点的信息看起来很有希望:
3 breakpoint keep y <MULTIPLE>
stop only if i==495
但是当条件达到时,它不会在断点处停止。所以我开始写这个问题,我尝试尝试:
condition 3 "if i == 495"
并且万岁它有效。所以我想我的问题是:1。为什么两个命令之间的语法不同? 2.为什么信息如此令人困惑?如果i == 495“',新信息会显示'if',但是如果'i == 495'评估为真,那么不应该只评估为真?
答案 0 :(得分:1)
你的最后一次尝试没有做你认为它正在做的事情。当你写:
cond 3 "if i == 495"
条件实际上是字符串常量&#34;如果i == 495&#34;,这绝不是假的。所以,断点就会停止。
您可以通过print i
(对于某些点击它赢得495)或cond 3 "anything goes here!"
来看到这一点。
正确的语法是你的第二次尝试:
cond 3 i == 495
我不能说为什么这不会触发你。
答案 1 :(得分:0)
如果您使用gdb调试fortran,则可能会在尝试使用合理的命令时收到语法错误:
SELECT vbak~vbeln, vbak~vtweg, vbap~posnr, vbap~matnr, vbap~vrkme
INTO @DATA(l_work_area)
FROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbeln.
WRITE: / l_work_area-vbeln, l_work_area-vtweg, l_work_area-posnr, l_work_area-matnr, l_work_area-vrkme.
ENDSELECT.
这样做的原因是您必须对逻辑运算符使用旧式的fortran语法((gdb) b foo.f:10 if i == 0
A syntax error in expression, near `= 0'.
而不是.eq.
等)
==