1. 程式人生 > >2007年11月6日總結

2007年11月6日總結

昨天晚上外網運行了上線通知有問題,又出現了上次的問題,執行一段時間之後程式慢慢退出。。

查了好久,終於找到原因,特此寫下,作為一個總結。

編譯錯誤已經排除,g++ -Wall能排除大部分的錯誤

按照一般的思路,1.程式出錯退出,都會產生core檔案,分析core檔案就能查詢到哪裡出錯了,但是由於我的程式是繼承公司的父類,產生多個子程序,公司的策略是一個子程序異常死亡會被捕獲,然後自動拉起一個新子程序,不會產生core檔案,所以比較鬱悶,懷疑是記憶體出錯,2.執行valgrind分析,沒有查到錯誤,但是問題依舊存在。。

3.寫日誌,寫日誌只能察看邏輯方面的,因為是多程序,日誌比較亂,很難分清是哪裡的日誌,到底哪裡死掉了很難看出來

4.檢視程式碼也找不到是啥原因,最後實在沒辦法了,5.在主要程式部分新增try{} catch(...){},自己捕獲所有異常,終於發現問題出在哪個函數了,然後在該函式部分新增日誌,列印記憶體資訊

最後找到了問題,原來是有一個函式需要一個手機號碼作為引數,但是沒有檢查該手機號是否是錯誤資料,導致異常。。。

總結:一個函式:要檢查正確的輸入,要區分各種情況的輸出,對於資料一定要判斷

///////////////////////////////////////////////////////////////////////////////////////////////

grep 時偶爾會出現如下錯誤 Binary file 檔名 matches

grep將檔案當作了二進位制的了,加引數 -a 強制按照text檔案來匹配就ok了。。