gdb watch 调试时,无法watch

来源:互联网 发布:网络诽谤案例 编辑:程序博客网 时间:2024/06/06 01:18


服务器实际运行时, 某个对象的某个变量不知道啥时候被改掉了。  

用valgrind查了 ,没有内存越界,  那就是逻辑上有问题。 


这种情况 gdb 的 watch功能就非常好用。  它能检测内存中的值被改了,就会自动断点。


现在能访问到这个变量的地方随便断个点,  断点后 watch一下这个变量地址中的内容。


但实际使用中  watch m_sid

结果 continue后  出现:

Watchpoint 2 deleted because the program has left the block in
which its expression is valid.



查了一下资料,这个情况一般是局部变量 销毁了, 就自动不监控了。

但我这个变量是某个对象的属性成员啊? 奇怪。


不得已,换了一种方式:


1.先找出这个变量的地址

p &m_sid


$2 = (int32_t *) 0x74ed588


2. watch 这个地址指向的内容  (注意 不能 watch  (int32_t *) 0x74ed588, 因为这个是内存地址,一般不会变。)

watch *(int32_t *) 0x74ed588


即可 找到 这个变量在哪个代码里被修改了。 



0 0