2007年11月6日總結
阿新 • • 發佈:2019-01-29
昨天晚上外網運行了上線通知有問題,又出現了上次的問題,執行一段時間之後程式慢慢退出。。
查了好久,終於找到原因,特此寫下,作為一個總結。
編譯錯誤已經排除,g++ -Wall能排除大部分的錯誤
按照一般的思路,1.程式出錯退出,都會產生core檔案,分析core檔案就能查詢到哪裡出錯了,但是由於我的程式是繼承公司的父類,產生多個子程序,公司的策略是一個子程序異常死亡會被捕獲,然後自動拉起一個新子程序,不會產生core檔案,所以比較鬱悶,懷疑是記憶體出錯,2.執行valgrind分析,沒有查到錯誤,但是問題依舊存在。。
3.寫日誌,寫日誌只能察看邏輯方面的,因為是多程序,日誌比較亂,很難分清是哪裡的日誌,到底哪裡死掉了很難看出來
4.檢視程式碼也找不到是啥原因,最後實在沒辦法了,5.在主要程式部分新增try{} catch(...){},自己捕獲所有異常,終於發現問題出在哪個函數了,然後在該函式部分新增日誌,列印記憶體資訊
最後找到了問題,原來是有一個函式需要一個手機號碼作為引數,但是沒有檢查該手機號是否是錯誤資料,導致異常。。。
總結:一個函式:要檢查正確的輸入,要區分各種情況的輸出,對於資料一定要判斷
///////////////////////////////////////////////////////////////////////////////////////////////
grep 時偶爾會出現如下錯誤 Binary file 檔名 matches
grep將檔案當作了二進位制的了,加引數 -a 強制按照text檔案來匹配就ok了。。