linux下檢查記憶體洩露的工具--mtrace
最令linux程式設計師頭疼的莫過於記憶體洩露了,即使你是在優秀的程式設計師,你也不能保證所以的malloc操作都有對應的free,那必要的工具就是必不可少的了。在一般的linux發行版中,有一個自帶的工具可以很方便的替你完成這些事,這個工具就是mtrace。
下面是它的用法
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <mcheck.h>
- int main(){
- setenv("MALLOC_TRACE", "output", 1);
- mtrace();
- char * text = ( char * ) malloc (sizeof(char) * 100);
- memset(text,'/0',100);
- memcpy(text,"hello,world!",12);
- printf("%s/n",text);
- return 0;
- }
可以看出,只需要在你的程式中插入三行程式碼,就行。
第一句,#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,不過我沒用過,以後用到了在寫下使用方法吧
相關文章
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 使用mtrace追蹤JVM堆外記憶體洩露JVM記憶體洩露
- leaks工具查詢記憶體洩露記憶體洩露
- 如何在vs下linux下檢測記憶體洩露Linux記憶體洩露
- malloc_stats---檢查記憶體洩露的神器記憶體洩露
- C程式記憶體洩露檢測工具——ValgrindC程式記憶體洩露
- C++記憶體洩露檢查的5個方法C++記憶體洩露
- LeakCanary 傻瓜式的記憶體洩露檢測工具記憶體洩露
- LeakCanary傻瓜式的記憶體洩露檢測工具記憶體洩露
- MLeaksFinder:精準 iOS 記憶體洩露檢測工具iOS記憶體洩露
- Android 檢測記憶體洩露Android記憶體洩露
- MFC記憶體洩露與檢測記憶體洩露
- 記憶體洩露記憶體洩露
- 線上記憶體洩露定位--memleak工具記憶體洩露
- 【YFMemoryLeakDetector】人人都能理解的 iOS 記憶體洩露檢測工具類iOS記憶體洩露
- java中如何檢視記憶體洩露Java記憶體洩露
- js記憶體洩露JS記憶體洩露
- JavaScript記憶體洩露JavaScript記憶體洩露
- 記憶體洩露嗎記憶體洩露
- SHBrowseForFolder 記憶體洩露記憶體洩露
- 檢視 Node.js 中的記憶體洩露Node.js記憶體洩露
- 在iOS上自動檢測記憶體洩露iOS記憶體洩露
- Android記憶體優化——記憶體洩露檢測分析方法Android優化記憶體洩露
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- Android記憶體洩露分析以及工具的使用Android記憶體洩露
- js記憶體洩露的原因JS記憶體洩露
- Java記憶體洩露的原因Java記憶體洩露
- JAVA 記憶體洩露的理解Java記憶體洩露
- IE中的記憶體洩露記憶體洩露
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 如何在 Linux 下檢測記憶體洩漏Linux記憶體
- Lowmemorykiller記憶體洩露分析記憶體洩露
- JavaScript記憶體洩漏檢測工具JavaScript記憶體
- 工具介紹 - 捕獲Windows CE的記憶體洩露Windows記憶體洩露
- C++Builder 記憶體洩漏檢查工具-CodeGuard (轉)C++UI記憶體
- 如何檢查Javascript中的記憶體洩漏JavaScript記憶體
- 記憶體洩露引起的問題記憶體洩露
- JavaScript中的記憶體洩露模式JavaScript記憶體洩露模式