linux下檢查內存泄露的工具--mtrace

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

 

下面是它的用法

 

可以看出,只需要在你的程序中插入三行代碼,就行。

第一句,#include <mcheck.h>,包含頭文件

第二句,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,不過我沒用過,以後用到了在寫下使用方法吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章