C語言編寫的程序運行效率高,但是 C 語言最大的好處和壞處是它允許直接操作內存,如果使用不小心,這就會導致程序的非法推出
而且當程序過大時,此類錯誤非常難查,下面介紹一種方法,從錯誤的內存地址反向查找出問題的程序
linux 平台:
1. 在程序信號處理部分, 加入代碼捕捉引起錯誤點的地址,方法參考文章
http://www-128.ibm.com/developerworks/cn/linux/l-sigdebug.html
簡單來說,方法就是在注冊自己的信號處理函數,在這個函數中加入獲取內存錯誤地址的代碼,並把結果寫到一個日志文件中。
2. 編譯 DEBUG 版本 程序 (compile 時用 -g , 生成可執行文件後不用 strip 去掉symbol 信息)
3. 在程序出問題時, 查看日志記錄, 得到錯誤點的地址.
4. 用objdump -S 導出Debug 版本的匯編代碼, 查找錯誤地址, 則得出那條語句出錯.
windows 下c 語言調試
1. release 版編譯/連接選項, 把"generate debug info" 打鉤選擇
2.dumpbin /DISASM /OUT:dump.out.txt.1 prep.exe 可反編譯exe文件
3.得到程序非法地址(可從管理工具-》事件查看器裡得到),與匯編比較。
本文來自:  ( ) 詳細出處參考:http:// /show.asp?id=685