GDB:如果variables相等,则中断

我想让GDB设置一个断点,当一个variables等于我设置的某个值时,我试过这个例子:

#include <stdio.h> main() { int i = 0; for(i=0;i<7;++i) printf("%d\n", i); return 0; } 

GDB输出:

 (gdb) break if ((int)i == 5) No default breakpoint address now. (gdb) run Starting program: /home/SIFE/run 0 1 2 3 4 5 6 Program exited normally. (gdb) 

就像你看到的那样,GDB没有任何突破点,这对GDB来说可能吗?

除了嵌套在断点内的观察点之外,还可以在“文件名:行号”上设置单个断点并使用条件。 我觉得有时更容易。

 (gdb) break iter.c:6 if i == 5 Breakpoint 2 at 0x4004dc: file iter.c, line 6. (gdb) c Continuing. 0 1 2 3 4 Breakpoint 2, main () at iter.c:6 6 printf("%d\n", i); 

如果像我一样厌倦了行号的变化,你可以添加一个标签,然后在标签上设置断点,如下所示:

 #include <stdio.h> main() { int i = 0; for(i=0;i<7;++i) { looping: printf("%d\n", i); } return 0; } (gdb) break main:looping if i == 5 

你可以使用一个观察点(数据而不是代码的断点)。

你可以开始使用watch i
然后使用condition <breakpoint num> i == 5为其设置条件

你可以通过使用info watch来获得断点编号

  $ gcc -Wall -g -ggdb -o ex1 ex1.c $ gdb ./ex1 (gdb) list 1 #include <stdio.h> 2 int main(void) 3 { 4 int i = 0; 5 for(i=0;i<7;++i) 6 printf("%d\n", i); 7 8 return 0; 9 } (gdb) b 5 Breakpoint 1 at 0x4004fb: file ex1.c, line 5. (gdb) rwatch i if i==5 Hardware read watchpoint 5: i (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004004fb in main at ex1.c:5 breakpoint already hit 1 time 5 read watchpoint keep yi stop only if i==5 (gdb) c Continuing. 0 1 2 3 4 Hardware read watchpoint 5: i Value = 5 0x0000000000400523 in main () at ex1.c:5 5 for(i=0;i<7;++i) 

有硬件和软件观察点。 他们是阅读和写一个variables。 你需要咨询一个教程:

http://www.unknownroad.com/rtfm/gdbtut/gdbwatch.html

要设置观察点,首先需要将代码分解到环境中存在varianle的地方,并设置观察点。

watch命令用于设置用于书写的观察点,而用于阅读的读取点以及用于读取/写入的awatch