gdb,break vs tbreak和watchpoint

时间:2011-06-06 11:52:31

标签: debugging gdb watchpoint

任何人都可以告诉我关于观察点的突破和突破之间的区别是什么?

A有一个简单的测试代码:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv) {
  int toto;
  toto = 1;
  toto = 2;
  toto = 3;
  return (EXIT_SUCCESS);
}

当我在main()上使用break时,那么看,toto似乎从0切换到2:

(gdb) break main
Breakpoint 1 at 0x804839a: file pp.c, line 6.
(gdb) r
Starting program: /mnt/mega20/SRC/C/gdb/pp 

Breakpoint 1, main (argc=1, argv=0xbffff4f4) at pp.c:6
6         toto = 1;
(gdb) watch toto 
Hardware watchpoint 2: toto
(gdb) c
Continuing.
Hardware watchpoint 2: toto

Old value = 0
New value = 2
main (argc=1, argv=0xbffff4f4) at pp.c:8
8         toto = 3;
(gdb)

但是当我使用tbreak时,看起来似乎有效:

(gdb) tbreak main 
Temporary breakpoint 1 at 0x804839a: file pp.c, line 6.
(gdb) r
Starting program: /mnt/mega20/SRC/C/gdb/pp 

Temporary breakpoint 1, main (argc=1, argv=0xbffff4f4) at pp.c:6
6         toto = 1;
(gdb) watch toto 
Hardware watchpoint 2: toto
(gdb) c
Continuing.
Hardware watchpoint 2: toto

Old value = 0
New value = 1
main (argc=1, argv=0xbffff4f4) at pp.c:7
7         toto = 2;
(gdb) c
Continuing.
Hardware watchpoint 2: toto

Old value = 1
New value = 2
main (argc=1, argv=0xbffff4f4) at pp.c:8
8         toto = 3;
(gdb)

与start命令相同的结果,它可以工作。

1 个答案:

答案 0 :(得分:1)

我建议你阅读:

Breakpoints and Watchpoints