gdb,break vs tbreak和观察点



有人能告诉我关于观察点,break和tbreak之间有什么区别吗?

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命令的结果相同,它有效。

我建议您阅读以下内容:

断点和监视点

最新更新