2013年8月9日 星期五

寫程式容易除錯難 II

在這一個行業混那麼多年了,這個是真是感觸很深,最近有個客戶把CODE丟到我手上,要我除錯,我花了一天想要建立環境,還要混到晚上等他起床,隔天大概花了不到一天的時間就查到問題所在,又是個Memory overlap的問題。

這老兄阿,顯示年月日的空間只要了七個字元的空間,扣除掉最後的c-string的結尾,前面只有6個字元而已。

下完底下這一行
sprintf(buffer,"%02d%02d%02d", bYY,bMM,bDD);

整個程式就瘋了,bYY因為RTC時間不正常,數值是226,記憶體一下子就overlap了,當然是吐出segmentation fault啦!

這看似很簡單的錯誤,這老美卻是把問題丟出來,DEBUG這回事有時候答案是很蠢,很簡單的錯誤,可是要找到這蟲阿,卻可能是個很複雜的過程。

今天發現有一個還不錯的東西等待研究Valgrind,這單字好像是英靈殿的入口,英靈殿(瓦爾哈拉Valhalla)是北歐神化中的天堂,掌管戰爭、藝術與死者的主神奧丁命令女武神(瓦爾基里Valkyrja)將陣亡的英靈戰士(恩赫里亞 Einherjar)帶來此服侍,這堆在日本動畫中出現的北歐神話字眼,都不是重點~~ㄎㄎㄎ。

Valgrind是在Linux下GPL V2的模擬除錯工具的集合,目前是還沒試過,相信也是有機會用的上,這一次我是用core dump的資訊去追出錯的地方,用的是老方法。

改天研究一下這個東西怎麼用~ㄎㄎㄎ(會用就進去英靈殿了)

參考資料:
IBM的文件
某人的部落格
WIKI說明

沒有留言:

張貼留言