服务器实际运行时, 某个对象的某个变量不知道啥时候被改掉了。
用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
即可 找到 这个变量在哪个代码里被修改了。