免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3017 | 回复: 3
打印 上一主题 下一主题

问个关于gdb的watch的事情 [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-14 21:12 |只看该作者 |倒序浏览
我这里watch是对一个局部变量的。

  1. (gdb) l
  2. 1             int j=12;
  3. 2             int main()
  4. 3             {
  5. 4                     int a=10;//a=10
  6. 5                     a=a+10;//a=20
  7. 6                     j += 1;
  8. 7                     return 0;
  9. 8             }
  10. 9
  11. (gdb) b 5
  12. Breakpoint 1 at 0x804839c: file 2.c, line 5.
  13. (gdb) r
  14. Starting program: /tmp/a.out

  15. Breakpoint 1, main () at 2.c:5
  16. 5                     a=a+10;//a=20
  17. (gdb) watch a
  18. Hardware watchpoint 2: a
  19. (gdb) c
  20. Continuing.

  21. Watchpoint 2 deleted because the program has left the block in
  22. which its expression is valid.
  23. 0xb7e0d26b in exit () from /lib/libc.so.6

复制代码

一直到程序结束的时候进程都没有中止过。


而以下C语言代码:

  1.       int j=12;
  2.       int main()
  3.       {
  4.               int a=10;//a=10
  5.               a=a+10;//a=20
  6.               a=a*2;//a=40
  7.               j += 1;
  8.               return 0;
  9.       }

复制代码

以下是gdb过程

  1. (gdb) l
  2. 1             int j=12;
  3. 2             int main()
  4. 3             {
  5. 4                     int a=10;//a=10
  6. 5                     a=a+10;//a=20
  7. 6                     a=a*2;//a=40
  8. 7                     j += 1;
  9. 8                     return 0;
  10. 9             }
  11. 10
  12. (gdb) b 5
  13. Breakpoint 1 at 0x804839c: file 2.c, line 5.
  14. (gdb) r
  15. Starting program: /tmp/a.out

  16. Breakpoint 1, main () at 2.c:5
  17. 5                     a=a+10;//a=20
  18. (gdb) print a
  19. $1 = 10
  20. (gdb) watch a
  21. Hardware watchpoint 2: a
  22. (gdb) c
  23. Continuing.
  24. Hardware watchpoint 2: a

  25. Old value = 10
  26. New value = 40
  27. main () at 2.c:7
  28. 7                     j += 1;

复制代码

stop没有停在a=a*2;这一句上...


[ 本帖最后由 cjaizss 于 2007-5-14 21:16 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-05-14 21:22 |只看该作者
被编译器优化了吧...

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2007-05-14 21:26 |只看该作者
原帖由 Edengundam 于 2007-5-14 21:22 发表
被编译器优化了吧...

不,没有被优化,可以单步的。

论坛徽章:
0
4 [报告]
发表于 2007-05-14 21:31 |只看该作者
原帖由 cjaizss 于 2007-5-14 21:26 发表

不,没有被优化,可以单步的。



哦..我在windows的msys下测试...是ok的...和你的情况不同
gcc编译开关: 就用了-g
我的版本:

  1. Administrator1~
  2. $ gdb --version
  3. GNU gdb 5.2.1
  4. This GDB was configured as "i686-pc-mingw32".

  5. Administrator1~
  6. $ gcc --version
  7. gcc.exe (GCC) 3.4.2 (mingw-special)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP