這些資訊是 ubuntu 7.10 , gcc 4.1.3, gdb 6.6-debian 跟蹤的
當printf不夠有效時。。。。
1。讀懂錯誤資訊
乙個簡單的例子;
#include
#include
void a()
intmain(
intargc,
char
**argv)
...
除錯的時候, b sighandler, 然後bt.
但捕捉sigsegv是危險的,不能無限的捕捉, 不然無限迴圈了。捕捉一次就夠。
5. 或者gdb下,在程式被強制退出後, 試一下list命令
6。工具:valgrind
記憶體差錯的工具很多,valgrind是最強大的乙個。有些工具提供乙個庫,連線到源**,完了還要改回去,不方便。
有些工具檢查一些特定的呼叫:
* strace: 系統呼叫, 比如檔案開啟,關閉
* mtrace, electronice fence(電網), dmalloc, memwatch
(mastering linux debugging techniques): malloc呼叫
* ltrace: "dynamic library call"
* nm, objdump: obj檔案資訊,資訊太繁瑣了, 也許要不得以而用之。 沒有用過這兩個工具。
7。其它
**ash the stack
gcc與obj檔案,動態鏈結檔案和elf檔案
BREW程式記憶體洩露定位
由malloc分配的記憶體,如果退出程式時沒有釋放,會在output視窗heap info資訊裡顯示這塊記憶體是在哪個檔案,哪一行分配的。brew的malloc是這樣定義的 define malloc size get helper dbgheapmark get helper malloc siz...
BREW程式記憶體洩露定位
由malloc分配的記憶體,如果退出程式時沒有釋放,會在output視窗heap info資訊裡顯示這塊記憶體是在哪個檔案,哪一行分配的。brew的malloc是這樣定義的 define malloc size get helper dbgheapmark get helper malloc siz...
C 記憶體常見錯誤
在系統開發過程中出現的bug相對而言是比較好解決的,花費在這個上面的除錯代價不是很大,但是在系統整合後的bug往往是難以定位的bug 最好方式是打樁,通過打樁可以初步鎖定出錯的位置,如 進入函式前列印日誌,離開時再次列印日誌 而這些難以定位的bug基本分為2類 記憶體錯誤和並非問題。本文總結的時記憶...