內存泄漏檢測工具VLD在VS2010中的使用舉例


Visual LeakDetector(VLD)是一款用於Visual C++的免費的內存泄露檢測工具。它的特點有:(1)、它是免費開源的,采用LGPL協議;(2)、它可以得到內存泄露點的調用堆棧,可以獲取到所在文件及行號;(3)、它可以得到泄露內存的完整數據;(4)、它可以設置內存泄露報告的級別。

         默認情況下,只有在Debug模式下才會啟用VLD的功能。

         在使用的時候只要將VLD的頭文件和lib文件放在工程文件中即可。

         在需要檢測內存泄露的源文件中添加#include “vld.h”

         VLD只能在Windows下使用,它應用在C/C++語言中。

         通過修改vld.ini文件(ReportFile選項),可以設置內存泄露報告的保存位置。

         VLD好像對中文路徑不支持。

         VLD的各個版本對應適用於不同的VC/VS編譯器,注意選擇合適的版本。

 

1.        從http://vld.codeplex.com/SourceControl/latest#README.md下載最新源代碼,解壓縮,里面包含有源碼、vs2010工程配置、以及一些依賴庫,如dbghelp等;

2.          打開vld_vs10.sln,在32位/64位下,分別編譯debug和release下vld工程,會在當前目錄下生成bin文件夾,里面包含相應的庫文件;

3.          新建控制台工程VLDtest,在Debug下運行,代碼如下:

stdafx.cpp:

 

  1.  
    #include "stdafx.h"
  2.  
     
  3.  
    #ifdef _DEBUG
  4.  
    #pragma comment(lib, "../../../src/VLD/bin/Win32/Debug/vld.lib")
  5.  
    #else
  6.  
    //#pragma comment(lib, "../../../src/VLD/bin/Win32/Release/vld.lib")
  7.  
    #endif

VLDtest.cpp:

 

 

  1.  
    #include "stdafx.h"
  2.  
    #include "../../src/VLD/vld.h"
  3.  
    #include <iostream>
  4.  
     
  5.  
    using namespace std;
  6.  
     
  7.  
    void fun()
  8.  
    {
  9.  
    char* tmp = new char[10];
  10.  
    memset(tmp, 0, 10);
  11.  
    }
  12.  
     
  13.  
    int main(int argc, char* argv[])
  14.  
    {
  15.  
    fun();
  16.  
     
  17.  
    cout<<"ok!"<<endl;
  18.  
     
  19.  
    return 0;
  20.  
    }

 

4.          運行提示,“無法啟動此程序,因為計算機中丟失vld_x86.dll”,解決方法,將bin/Win32/Debug/vld_x86.dll拷貝到VLDtest執行目錄下或將vld_x86.dll路徑添加到系統環境變量中;

5.          運行提示,“應用程序無法正常啟動(0xc0150002)”,將源代碼中的/setup/dbghelp/x86文件夾下的dbghelp.dll和Microsoft.DTfW.DHL.manifest兩個文件拷貝到VLDtest執行目錄下即可;

6.          直接按F5運行,可以在Output窗口顯示內存泄漏的相關信息,包括發生內存泄漏的文件名和行號,雙擊即可定位到內存泄漏的具體位置;

7.          或者直接運行,相關信息可以顯示在命令行窗口中;

8.        也可將內存泄漏信息寫入文件中,將源代碼中的vld.ini文件拷貝到VLDtest工程目錄下,即與VLDtest.vcxproj同目錄,修改vld.ini文件中的選項參數,ReportFile = .\../../../lib/dbg/x86_vc10/memory_leak_report.txt,ReportTo =both(原始ReportTo = debugger),重新運行后,會在執行目錄下生成一個memory_leak_report.txt文件;或者將vld.ini文件拷貝到執行目錄下,運行VLDtest[dbg_x86_vc10].exe文件也可生成報告文件;

9.          在Release下運行,VLD不起作用,VLDtest工程不用作任何配置和調整;

10. 也可不用編譯源代碼,直接從http://vld.codeplex.com/releases下載,然后安裝即可,里面包含需要的庫和頭文件。

圖中為運行測試代碼時顯示的內存泄漏信息:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM