为了账号安全,请及时绑定邮箱和手机立即绑定

gdb调试打印的变量内容和程序运行输出内容不一致

gdb调试打印的变量内容和程序运行输出内容不一致

C++
拉丁的传说 2018-09-06 19:02:03
题目描述基类socketBase, 派生类TcpSocket,函数fun调用中,派生类的this指针传递给以基类socketBase指针为参数的函数,在函数里类型转换为TcpSocket,但是发现TcpSocket里面的成员都置为0,而基类里面的成员正确。用gdb进行调试,但是在调试工具里面,fun里面TcpSocket类里面自身的变量内容正常,但是程序实际运行打印出来的变量内容却是0不知道什么原因。。。图片如下:gdb调试:(gdb) p tcpSocket->m_bConnected$2 = true(gdb) p tcpSocket->m_uid$3 = 12(gdb) p tcpSocket->m_iLastRecvTime$4 = 1532751659程序运行打印:TrackerMgr::onClose m_bConnected 0, uid 0, lasttime 0.思路:基本可以确定类型转换没有问题,调试工具里面也看到成员变量访问没有问题,实在不知道什么原因,求解答。
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

从调试工具比如gdb那拿到的结果有时不能保证是正确的。至于这到底是为什么,这也许是gdb的问题,在深入的话我也不了解了(如果有人知道的话,还请在评论区指教)。这也是为什么有的时候用IDE的单步跟踪查看变量值可能是不正确的。

如果打log的话,就可以保证完全正确了。


查看完整回答
反对 回复 2018-09-08
  • 1 回答
  • 0 关注
  • 561 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信