Watch in DGB

原创 2011年01月07日 16:30:00

有没有这样的经历,程序崩溃或者running abnormal, 经过一番调查,发现是某个变量被意外的改动了,但是到底是什么地方意外修改了我的数据呢?一般我们可以采用2分法逐步缩小怀疑对象的范围,可问题是很多“坏人”不是那么容易发现的。比如你看:

 

class arrowpig

{

  private:      

      char* m_pText;      

      std::list<char*> m_dataList;

  public:

        ~arrowpig()

        { 

              for(std::list<char*>::iterator iter=m_dataList.begin();iter!=m_dataList.end();iter++)

             {             

                  delete (*iter);    

             }       

        }

 };

 

#include <ThirdPartyLib.h>  //我们的程序用了第三方的库

 

arrowpig inst;

……

ThirdPartyLib::someClass 3rdInst(para1,para2,para3);

 

我发现只要一执行ThirdPartyLib::someClass 的构造函数,arrowpig实例inst的内容就被修改了,于是造成inst析构时crash! 这个时候比较适合在GDB中使用watch命令:

 

gdb> watch inst.m_pText

 

这样,每当inst.m_pText中的内容被改动(读或者写)的时候,程序都会停下来,然后用where命令就能比较方便的定位罪魁祸首。但是注意一点,使用watch以后,程序会运行得非常的慢,所以实际操作的时候一定先要大致确认怀疑对象,在即将执行你怀疑的代码之前设置断点,然后使用watch,目的是减少受watch影响的范围。

 

上面这个问题最后发现是 由于我们include的第三方库的头文件版本和实际link的库文件版本不一致。

 

头文件告诉我们ThirdPartyLib::someClass 占用100字节,但是库的实现文件认为是120个字节,于是在构造函数中修改了后面的20个字节,破坏了同样在栈中的属于arrowpig实例的内容。

 

vue中watch的理解小记

通过路由id的变化使组件重组,可以用watch来监听id,watch的使用方法。
  • wangxiaoxiaosen
  • wangxiaoxiaosen
  • 2017年11月09日 10:58
  • 667

【翻译】使用新的Sencha Cmd 4命令app watch

如果没有使用过Sencha Cmd进行过辅助开发,可能对Sencha Cmd很陌生,对app watch也会看到一头雾水,不知就里。对我来说,新的app watch可以说是解决了之前使用Sencha ...
  • tianxiaode
  • tianxiaode
  • 2013年12月13日 15:54
  • 7500

集成webpack-dev-server,watch的打包工具使用

该工具目前也在开发完善阶段,建议在github阅读并获取最新开发状态,并欢迎issue,start1.该工具的三种打包模式首先必须说明一下,该工具是基于webpack2的,所以很多配置都是需要遵守we...
  • liangklfang
  • liangklfang
  • 2017年03月03日 15:48
  • 2088

关于angularJS的$watch的 一些小用法

$watch方法,它可以帮助我们在每个scope中监视其中的变量。$watch 单一的变量对于普通的变量时,如数字,字符串等,直接如下写是可以监视到变量的变化,并执行相应的函数的。$scope.cou...
  • u010451286
  • u010451286
  • 2016年02月04日 17:24
  • 31555

linux watch与tail命令用法

Linux的tail查看文件   查看文件内容的特殊方法 相信最基本的cat、more和less你已经很熟悉了,如果有特殊的要求呢: 1. 如果你只想看文件的前5行,可以使用h...
  • achejq
  • achejq
  • 2014年09月25日 13:24
  • 4408

angularjs 删除作用域时清除$watch

先看下面一段代码 删除内容 查看作用域 输入内容: var app = angu...
  • jian1jian_
  • jian1jian_
  • 2017年05月05日 15:16
  • 1296

如何用好github中的watch、star、fork

每个 github 项目的右上角,都有三个按钮,分别是 watch、star、fork,但是有些刚开始使用 github 的同学,可能对这三个按钮的使用却不怎么了解, 包括一开始使用 github 的...
  • Jerome_s
  • Jerome_s
  • 2017年01月05日 10:59
  • 1139

使用gdb watch调试代码

本篇文章将使用一个简单的例子说明如何使用gdb watch调试代码。         首先来看以下一段简单的代码                           显然,第7行代码是有问题,那么...
  • ZhongyiGu
  • ZhongyiGu
  • 2015年09月25日 07:25
  • 1523

Eclipse的watch窗口怎么调

Eclipse的watch窗口
  • qq_20916555
  • qq_20916555
  • 2017年04月18日 15:43
  • 2828

用gdb调试core dump文件

用gdb调试core dump文件
  • zhanghaiyang9999
  • zhanghaiyang9999
  • 2014年11月13日 14:09
  • 1444
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Watch in DGB
举报原因:
原因补充:

(最多只允许输入30个字)