使用Visual Leak Detector檢測內存泄漏

安裝Visual Leak Detector

前往官網下載並安裝。

設置

附加包含目錄添加C:\Program Files (x86)\Visual Leak Detector\include
附加庫目錄添加C:\Program Files (x86)\Visual Leak Detector\lib\Win64
附加依賴項添加vld.lib
將vld.ini中的ReportTo修改爲both

測試

寫一段內存泄漏的代碼,然後運行,程序結束後將會在調試器和文件中生成內存泄漏報告,VLD_FORCE_ENABLE宏定義是爲了Release版本也能生成報告。

#include "stdafx.h"
#define VLD_FORCE_ENABLE
#include <vld.h>


int _tmain(int argc, _TCHAR* argv[])
{
    VLDGlobalEnable();
    VLDReportLeaks();
    char *strTest=new char[1024];
    sprintf(strTest,"111111");
    printf(strTest);
    VLDGlobalDisable();
    return 0;
}

WARNING: Visual Leak Detector detected memory leaks!
---------- Block 57 at 0x0000000000B93180: 1024 bytes ----------
  Leak Hash: 0xD1436EBC, Count: 1, Total 1024 bytes
  Call Stack (TID 10276):
    ntdll.dll!RtlAllocateHeap()
    f:\dd\vctools\crt_bld\self_64_amd64\crt\src\new.cpp (59): LeakTest.exe!operator new() + 0x8 bytes
    d:\work\leaktest\leaktest\leaktest.cpp (14): LeakTest.exe!wmain()
    f:\dd\vctools\crt_bld\self_64_amd64\crt\src\crt0.c (278): LeakTest.exe!__tmainCRTStartup() + 0x12 bytes
    kernel32.dll!BaseThreadInitThunk() + 0xD bytes
    ntdll.dll!RtlUserThreadStart() + 0x21 bytes
  Data:
    31 31 31 31    31 31 00 BA    0D F0 AD BA    0D F0 AD BA     111111.. ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........
    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA    0D F0 AD BA     ........ ........

提醒

該工具只能檢測堆(Heap)上分配的內存泄漏,不能檢測VirtualAlloc(Private Data)申請的內存泄漏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章