定位C程式記憶體錯誤

2021-04-16 20:38:42 字數 858 閱讀 6480

這些資訊是 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類 記憶體錯誤和並非問題。本文總結的時記憶...