爱生活,爱阅读
分类: LINUX
2012-09-20 20:06:13
观察点与断点相似。然而,观察点不能为函数或者代码行设置。观察点是设置在变量上的。当该变量被读入或者写入时,观察点被触发并停止程序的执行。
很难通过观察点命令本身理解其意义,所以下面的简单示例程序将作为该命令的用法例子。
int main(int argc, char **argv)
{
int x = 30;
int y = 10;
x = y;
return 0;
}
5.1如何为变量设置“写观察点”?使用watch命令。传递给该命令的是一个待估值的表达式。这表明你想设置观察点的变量必须在当前的范围内。所以,为了给一个非全局变量设置观察点,你必须在该局部变量所在的范围内设置一个断点。并在程序断点之后设置观察点。
注意:你可能注意到了下面的例子中,打印出的代码行并不与变量x改变的代码行一致。这是由于触发观察点的存储指令(store instruction),是强制执行“x=y”赋值语句的指令序列的最后一条。在例子中,main函数中已经设置了断点,并使程序停止运行。
(gdb) watch x
Hardware watchpoint 4: x
(gdb) c
Continuing.
Hardware watchpoint 4: x
Old value = -1073743192
New value = 11
main (argc=1, argv=0xbffffaf4) at test.c:10
10 return 0;
5.2如何为变量设定“读观察点”?使用rwatch命令。使用方法与watch命令相同。
(gdb) rwatch y
Hardware read watchpoint 4: y
(gdb) continue
Continuing.
Hardware read watchpoint 4: y
Value = 1073792976
main (argc=1, argv=0xbffffaf4) at test.c:8
8 x = y;
5.3如何为变量设定“读写观察点”?使用awatch命令。使用方法同watch命令。
5.4如何去使能观察点?活跃的观察点在断点列表中显示。时候用info breakpoints命令获取断点列表。然后使用disable命令来关闭观察点,如同去使能断点一样。
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x080483c6 in main at test.c:5
breakpoint already hit 1 time
4 hw watchpoint keep y x
breakpoint already hit 1 time
(gdb) disable 4