LeakDiag是一款功能強大的內存泄漏檢測軟件,它不需要和待檢測的源程序一起編譯,在使用上較為方便,能夠統計一段時間內的內存泄漏大小以及指出發生內存泄漏的源代碼的行數。該軟件是微軟一款檢測內存泄漏的工具,可以用來精確地找到內存泄露一直到代碼行。它使用微軟的Detours 技術,攔截指定內存分配的調用並跟蹤各種調用棧,並報告已分配但尚未釋放的內存,這一信息允許讓我們在排除一個內存泄露問題時,能精確查看哪些組件進行了該分配。
【LeakDiag支持5種不同的分配】:
1) 虛擬分配。 這種分配可追蹤用VirtualAlloc/ VirtualAllocEx 等關於虛擬內存分配的內存。此時,選擇LeakDiag 上[Memory allocators] 選項的“Virtual Memory Allocator”來檢測。
2) 堆分配。這種分配可追蹤NTDLL.DLL中如下函數分配的內存。
· RtlCreateHeap,
· RtlDestroyHeap,
· RtlAllocateHeap,
· RtlFreeHeap,
· RtlReAllocateHeap,
· LocalReAlloc,
· LocalFree,
· LocalAlloc,
· LocalReAlloc,
· GlobalAlloc,
· GlobalReAlloc and
· GlobalFree
此時,選擇LeakDiag 上[Memory allocators] 選項的“Windows Heap Allocator”來檢測。
3) 線程局部存儲(Thread Local Storage,TLS指允許一個進程的多個線程存儲每個線程所獨有的數據的一種Win32 機製)分配。這種分配可追蹤MSDART32.DLL中如下函數分配的內存。
· MPHeapAlloc,
· MPHeapFree and
· MPHeapReAlloc
此時,選擇LeakDiag 上[Memory allocators] 選項的“MPHeap Allocator”來檢測。
4) COM分配(外部和內部)。這種分配可追蹤OLE32.DLL,OLEAUT32.DLL 中如下函數分配的內存。
· CoGetMalloc,
· CoTaskMemAlloc,
· CoTaskMemFree,
· CoTaskMemRealloc,
· CRetailMalloc_Alloc,
· CRetailMalloc_Free,
· CRetailMalloc_Realloc,
· SysAllocStringLen,
· SysAllocStringByteLen,
· SysAllocString,
· SysFreeString,
· SysReAllocString and
· SysReAllocStringLen
此時,選擇LeakDiag 上[Memory allocators] 選項的“COM Allocator”或“COM Internal Allocator”來檢測。
5) C運行時分配。這種分配可追蹤MSVCRT.DLL中如下函數分配的內存。
· malloc,
· calloc,
· realloc,
· free,
· new,
· new[],
· delete and
· delete[]
此時,選擇LeakDiag 上[Memory allocators] 選項的“C Runtime Allocator”來檢測。