Chinaunix首页 | 论坛 | 博客
  • 博客访问: 366973
  • 博文数量: 83
  • 博客积分: 5322
  • 博客等级: 中校
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-11 11:27
个人简介

爱生活,爱阅读

文章分类

全部博文(83)

文章存档

2015年(1)

2013年(1)

2012年(80)

2011年(1)

分类: LINUX

2012-09-20 20:06:13

5.如何使用观察点?

观察点与断点相似。然而,观察点不能为函数或者代码行设置。观察点是设置在变量上的。当该变量被读入或者写入时,观察点被触发并停止程序的执行。

很难通过观察点命令本身理解其意义,所以下面的简单示例程序将作为该命令的用法例子。

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

阅读(2522) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~