記憶體洩漏測試小工具 - LeakDiag
LeakDiag是一個監測記憶體洩漏的工具,可以用來精確地找到記憶體洩露一直到程式碼行。它使用微軟的Detours 技術,攔截指定記憶體分配的呼叫並跟蹤各種呼叫棧,並報告已分配但尚未釋放的記憶體,這一資訊允許讓我們在排除一個記憶體洩露問題時,能精確檢視哪些元件進行了該分配。使用正確的除錯符號,我們甚至可以看見請求分配的程式碼行。
關於detours: http://research.microsoft.com/en-us/projects/detours/
LeakDiag 目前支援六種型別的洩漏檢查:
Virtual Allocator
Heap Allocator
MPHeap Allocator
COM AllocatorCoTaskMem
COM Private Allocator
C Runtime Allocator
版本:1.25
下載地址:
ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LeakDiag/
或者:
http://d.download.csdn.net/down/1168689/cloveroger
使用方法:
1、編寫一個包含記憶體洩漏問題的C程式,例如LeakDiagTest1:
#include <stdlib.h>
int main(int argc, char* argv[])
{
char *p = NULL;
while (getc(stdin))
{
p = (char *)malloc(1024);
//delete(p);
}
return 0;
}
2、執行C程式的可執行檔案LeakDiagTest1.exe,開啟LeakDiag
在程式列表中選擇LeakDiagTest1.exe
在Memory allocators列表中選擇“Windows Heap Allocator”
按Start開始進行監測
3、在LeakDiagTest1執行過程中,可多次按Log進行記憶體資訊收集(“快照”),最後按Stop停止監測
4、開啟logs目錄中的日誌檔案進行分析,可發現有記憶體洩漏現象:
<FRAME num="0" dll="LeakDiagTest1.exe" function ="_heap_alloc_base" offset="0x55" filename="malloc.c" line="161" addr="0x4035F5" />
<FRAME num="1" dll="LeakDiagTest1.exe" function ="_heap_alloc_dbg" offset="0x1A2" filename="dbgheap.c" line="367" addr="0x401352" />
<FRAME num="2" dll="LeakDiagTest1.exe" function ="_nh_malloc_dbg" offset="0x19" filename="dbgheap.c" line="242" addr="0x401159" />
<FRAME num="3" dll="LeakDiagTest1.exe" function ="malloc" offset="0x18" filename="dbgheap.c" line="130" addr="0x4010E8" />
<FRAME num="4" dll="LeakDiagTest1.exe" function ="main" offset="0x76" filename="E:/tmp/LeakDiagTest1/LeakDiagTest1.cpp" line="13" addr="0x401086" />
5、用LDGrapher可以圖形的方式更加直觀地看到多個快照點連續的記憶體洩漏情況
相關文章
- iOS檢測記憶體洩漏iOS記憶體
- 如何檢測記憶體洩漏記憶體
- 記憶體洩漏記憶體
- JavaScript記憶體洩漏檢測工具JavaScript記憶體
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- js記憶體洩漏JS記憶體
- Java記憶體洩漏Java記憶體
- webView 記憶體洩漏WebView記憶體
- Javascript記憶體洩漏JavaScript記憶體
- 使用 Instruments 檢測記憶體洩漏記憶體
- MFC 檢測記憶體洩漏的方法記憶體
- vs中檢測記憶體洩漏的方法記憶體
- 檢測並排除記憶體洩漏 (轉)記憶體
- 程式碼安全測試第十一期:記憶體洩漏漏洞記憶體
- 糾結的IE瀏覽器記憶體洩漏的測試瀏覽器記憶體
- 記憶體分析與記憶體洩漏定位記憶體
- 記憶體洩漏和記憶體溢位記憶體溢位
- valgrind 記憶體洩漏分析記憶體
- Android 記憶體洩漏Android記憶體
- Android記憶體洩漏Android記憶體
- 淺談記憶體洩漏記憶體
- 記憶體洩漏的原因記憶體
- JavaScript 記憶體洩漏教程JavaScript記憶體
- 說說 記憶體洩漏記憶體
- C++ 程式記憶體洩漏檢測方法C++記憶體
- C/C++記憶體洩漏及檢測C++記憶體
- VC++6.0中記憶體洩漏檢測C++記憶體
- Android檢測記憶體洩漏之leakcanaryAndroid記憶體
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- 如何在 Linux 下檢測記憶體洩漏Linux記憶體
- iOS記憶體洩漏自動檢測工具PLeakSnifferiOS記憶體
- Perfdog 玩轉記憶體洩漏記憶體
- WebView引起的記憶體洩漏WebView記憶體
- .Net程式記憶體洩漏解析記憶體
- Android 記憶體洩漏分析Android記憶體
- ARC下的記憶體洩漏記憶體
- PHP 記憶體洩漏分析定位PHP記憶體