观察点(watchpoint)和断点(breakpoint)类似,但是断点是程序运行前设置,观察点是运行中设置,而且只能是变量。
watch 观察到变量变化时,停止程序;
rwatch 观察到变量被读时,停止程序;
awatch 观察到变量被读或者被写时,停止程序。
越来越发现gdb非常强大了。
(gdb) r
Starting program: /home/gyz/mc/strcopy
string is NULL
string copying
Breakpoint 1, main (argv=1, argc=0x7fffffffe238) at strcopy.c:47
47 printf("test starting!\n");
(gdb) watch i
Hardware watchpoint 5: i
(gdb) rwatch i
Hardware read watchpoint 6: i
(gdb) awatch i
Hardware access (read/write) watchpoint 7: i
(gdb) c
Continuing.
test starting!
test ending!
Hardware watchpoint 5: i
Old value = 10
New value = 11
Hardware access (read/write) watchpoint 7: i
Old value = 10
New value = 11
0x00005555555548f8 in main (argv=1, argc=0x7fffffffe238) at strcopy.c:45
45 for(i = 0;i < 1000;i++)
(gdb)