close

唉~last誤我一生,每個人的bug都輪流ㄅㄧㄚ\ ㄎㄤXDDDD
希望沒有下一個犧牲者了

昨天tiger debug時卡到陰,今天才想出問題所在

我們每個人習慣都會在函式裡面加上assert,
一來確定上面呼叫我的人,他傳的參數是正確的!!
二來,用gdb debug的時候會自動在assert停下來,只要下where,就可以知道function call的stack情況

問題就出現在這裡明明底層FN的assert發生了,可是上一層的assert卻沒有作用,
然後printf也沒印出東西,用gdb看一下是發生在b段呼叫函式FN,printf在a段,當然打不著,

好吧那printf加到b段去,然後又沒印@@,gdb結果,又是一樣的情形,
這是caller又跑到c段去了....

又繼續重複了1,2之後終於找到出錯的那一行,可是把printf拿掉,又回到a....

雖然後來bug不在這裡面,所以這鬼問題,直到今天早上才想出來為甚麼...
因為我們的Makefile裡面的CFLAGS都設-O5,最佳化的情況下,有些程式碼會被重排,
而且那份code裡面很多地方重複性很高,應該八九不離十這個原因

我把-O5改成-O0,一次就到位,所以這個推論應該沒有錯XD

雖然不是第一次發生因為-O5而造成程式碼行數錯亂了,不過這麼卡到陰還真是第一次,
以後作source level debug,記得拿掉-O5哦

arrow
arrow
    全站熱搜

    koukaipan 發表在 痞客邦 留言(2) 人氣()