linux下檢查記憶體洩露的工具 mtrace

2021-05-26 02:38:16 字數 1070 閱讀 4813

最令linux程式設計師頭疼的莫過於記憶體洩露了,即使你是在優秀的程式設計師,你也不能保證所以的malloc操作都有對應的free,那必要的工具就是必不可少的了。在一般的linux發行版中,有乙個自帶的工具可以很方便的替你完成這些事,這個工具就是mtrace。

下面是它的用法

可以看出,只需要在你的程式中插入三行**,就行。

第一句,#include ,包含標頭檔案

第二句,setenv("malloc_trace", "output", 1);output表示輸出的中間檔案

第三句,mtrace(),呼叫mtrace.

將這個檔案編譯,注意,編譯的時候一地要加上gcc的-g選項。

gcc mtrace_test.c -g -o mtrace_test

接著執行可執行檔案,然後你會發現當前目錄下多了乙個output的檔案。

這個檔案自然不是文字檔案,所以需要工具來檢視。

$ mtrace mtrace_test output

這時會列印出一串資訊

- 0x000000000129a010 free 3 was never alloc'd 0x7f62844d89ba

- 0x000000000129a100 free 4 was never alloc'd 0x7f6284583a1d

- 0x000000000129a120 free 5 was never alloc'd 0x7f62845d20ec

memory not freed:

-----------------

address     size     caller

0x000000000129a5a0     0x64  at /home/dianping/peter/mtrace/mtrace_test.c:12

其它別的直接忽略,注意那句要命的 memory not freed,caller表示那段**對應的malloc操作沒有釋放。順便說一句,如果你編譯的時候沒有使用-g的選項,那麼caller這個地方就不會出現**的資訊,而是一串二進位制的位址資訊。

另外還有兩個工具據說也不錯dmalloc和memwatch,不過我沒用過,以後用到了在寫下使用方法吧

Linux下記憶體洩露工具

記憶體洩露 memory leak 指由於疏忽或錯誤造成程式未能釋放已經不再使用的記憶體的情況,在大型的 複雜的應用程式中,這時就出現了記憶體洩露。儘管優秀的程式設計實踐可以確保最少的洩露,但是根據經驗,當使用大量的函式對相同的記憶體塊進行處理時,很可能會出現記憶體洩露。記憶體洩露可以分為以下幾類 ...

如何檢查記憶體洩露

前一段時間寫了一些 自以為速度和效率都還不錯,測試執行了一段時間,發現 程式總會在中途死掉,仔細查查,原來是記憶體洩露的原故。看來寫程式還真是個細活,以後在這方面要加強。下面是我從網上搜到的檢查記憶體洩露的文章,還比較有用,牛人真是無處不在啊,以後有問題要多動手從網上找原因。如何檢查記憶體洩露問題 ...

vc記憶體洩露檢查

mfc檢測記憶體洩露是最方便的,只要在需要檢測的cpp檔案開始包含 ifdef debug define new debug new endif 就可以了。這是通過過載new操作符,在debug時可以在output中輸出記憶體洩露的位置。非mfc中檢測記憶體洩漏需要加上 ifdef debug de...