Debugging “为什么”的语法是;条件“;及;“中断”;gdb中的不同?

Debugging “为什么”的语法是;条件“;及;“中断”;gdb中的不同?,debugging,gdb,Debugging,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 break

我似乎对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

万岁。我想我的问题是:1.为什么这两个命令的语法不同?2.为什么信息如此混乱?新的信息说“如果”如果“如果I==495”,但是如果“I==495”的计算结果为真,那么它不应该只计算为真吗?

你最后一次尝试并没有做你认为它正在做的事情。当你写:

cond 3 "if i == 495"
该条件实际上是字符串常量“if i==495”,它从不为false。因此,断点停止

您可以通过执行
print i
(对于某些命中率,它不会是495),或者通过
cond 3“任何东西都在这里!“

正确的语法是您的第二次尝试:

cond 3 i == 495

我无法解释为什么这不会触发您。

如果您使用gdb调试fortran,在尝试合理的命令时可能会出现语法错误:

(gdb) b foo.f:10 if i == 0
A syntax error in expression, near `= 0'.
原因是,对于逻辑运算符,必须使用旧式fortran语法(
.eq.
,而不是
==
等等):

(gdb) b foo.f:10 if i .eq. 0 
Breakpoint 1 at 0x432738: file foo.f, line 10.

我知道这与这个问题没有严格的关系,但这个问题是在gdb中使用条件断点搜索语法错误时最热门的问题之一,也是不采用语言的热门问题(据我所知)。
(gdb) b foo.f:10 if i .eq. 0 
Breakpoint 1 at 0x432738: file foo.f, line 10.