鍍金池/ 問答/C++  Linux  數(shù)據(jù)庫/ gdb調(diào)試打印的變量內(nèi)容和程序運行輸出內(nèi)容不一致

gdb調(diào)試打印的變量內(nèi)容和程序運行輸出內(nèi)容不一致

題目描述

基類socketBase, 派生類TcpSocket,函數(shù)fun調(diào)用中,派生類的this指針傳遞給以基類socketBase指針為參數(shù)的函數(shù),在函數(shù)里類型轉(zhuǎn)換為TcpSocket,但是發(fā)現(xiàn)TcpSocket里面的成員都置為0,而基類里面的成員正確。
用gdb進(jìn)行調(diào)試,但是在調(diào)試工具里面,fun里面TcpSocket類里面自身的變量內(nèi)容正常,但是程序?qū)嶋H運行打印出來的變量內(nèi)容卻是0不知道什么原因。。。

圖片如下:
gdb調(diào)試:

(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.

思路:
基本可以確定類型轉(zhuǎn)換沒有問題,調(diào)試工具里面也看到成員變量訪問沒有問題,實在不知道什么原因,求解答。

回答
編輯回答
菊外人

從調(diào)試工具比如gdb那拿到的結(jié)果有時不能保證是正確的。至于這到底是為什么,這也許是gdb的問題,在深入的話我也不了解了(如果有人知道的話,還請在評論區(qū)指教)。這也是為什么有的時候用IDE的單步跟蹤查看變量值可能是不正確的。

如果打log的話,就可以保證完全正確了。

2017年3月14日 03:23