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