我在應用程序中發生了令人討厭的崩潰。 GDB總是將其追溯到__kernel_vsyscall()
。在調試後,我無法在源代碼中找到任何可疑的東西。在禁用GCC優化後不會發生__kernel_vsyscall()崩潰
但是在GCC編譯器中隨機禁用一次'-O3'優化標誌似乎可以解決問題。我不確定這是否是崩潰的原因,或者如果編譯器在優化期間可能做了一些令人討厭的事情。任何評論或信息都會有所幫助。
在下面顯示的一些回溯中,在應用程序代碼中觀察到的唯一錯誤的事情是從MsgQ(buffLen)接收的緩衝區的長度。但源代碼確保通過MsgQ發送和接收的最大消息大小爲2048字節。無法追蹤msgrcv()調用返回的長度爲何以及何時可能已損壞。
CRASH 1:
- 0x00110416在__kernel_vsyscall()
- 在從/lib/libc.so.6
- 0x0034d31c在__vsyslog_chk(發送()0x00352391)從打開/lib/libc.so 0.6
- syslog中()從procType1Msg /lib/libc.so.6
- 0x0804f08f(MsgBuff = 0xbfc10275)
- 0x080498c5在procRcvdMsQBuf(buffLen = 13451518 0x0034d5b7 4,淺黃色= '值優化了')
- 主(的argc = 3,argv的= 0xbfc10b24)
CRASH 2:
- 0x00110416在__kernel_vsyscall()
- 0x00352391在發送( )從在從系統日誌()/lib/libc.so.6
- 0x0034d5b7 __vsyslog_chk()/lib/libc.so.6
- 0x0034d31c從/lib/libc.so.6
- 0x0806234b在dumpMsg(淺黃色= 0xbfe01832 「U \ 006 \」 X,N,#®ü\ 027 \ BI @ \ 024" ,LEN = 23)
- 在procType1Msg 0x0804e539(MsgBuff = 0xbfe01815)
- 0x0804956d在procRcvdMsQBuf(buffLen = 134515040,淺黃色= '值優化了')
- 主(的argc = 3,argv的= 0xbfe020c4)
CRASH 3:
- 0x00110416在__kernel_vsyscall()
- 0x003在msgrcv()53e3f從/lib/libc.so.6
- 0x080639b9在getMsgQBuffer(MSG_ID = 196611,PMSG = 0xbfa9d360,lMsgType = 0,piErrorNo = 0xbfa9d35c)
- 在主0x080497dd(的argc =在無法訪問存儲器地址0x30003)
當你使用'-O2'時會發生什麼? – trojanfoe 2011-05-25 07:01:01