記憶體洩漏測試小工具 - LeakDiag

TIB發表於2010-03-01

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可以圖形的方式更加直觀地看到多個快照點連續的記憶體洩漏情況

 

 

 

相關文章