使用VLD進行記憶體洩漏檢測(release + debug)

CGWLMXUP發表於2019-02-18

 

VLD(Visual Leak Detector)是一款用於VisualC++的免費記憶體洩漏檢查工具。功能:

    1)  可以得到記憶體洩漏點的呼叫堆疊,還可以得到其所在的檔案及行號;

    2)  可以得到洩漏記憶體的完整資料;

    3)  惡意設定記憶體洩漏報告的級別;

    4)  它以動態庫的形式提供,無需編譯原始碼,只需要很小的改動程式;

    5)  原始碼使用GNU許可釋出,並有詳細的文件及其註釋。

VLD網址:http://vld.codeplex.com/

使用方法:

debug:在自己的工程中任意的原始檔中包含<vld.h>即可,編譯完的可執行程式並帶有VLD內在檢測功能

release:

     1,同Debug版本在VC中配置好VLD的相關資訊

     2, 拷貝Visual Leak Detector\bin\Win32目錄下所有的檔案和vld.ini到工程目標路徑下

     3,在程式入口處的cpp中,定義強制檢測巨集和包含vld標頭檔案

#define VLD_FORCE_ENABLE
#include "vld.h"

 

     4,在程式啟動和退出時,分別增加以下函式呼叫

{
    ...
    VLDGlobalEnable();
    VLDReportLeaks();
    //some code...
    VLDGlobalDisable();
}

     5,增加別的檢測模組

           以上配置後,預設情況下只會檢測主程式的模組,要想增加其他模組的記憶體洩露檢測,需要配置vld.ini檔案中的           ForceIncludeModules,多個模組用";"分隔,如:ForceIncludeModules = demo1.dll;demo2.dll

  6,配置輸出方式 

           預設只會在除錯下的終端中列印記憶體洩露資訊,可配置vld.ini檔案中的ReportTo為both,這樣可以同時想終端和檔案中打  印資訊,如:ReportTo = both

 

關於VLD的配置檔案:

 Vld的庫會檢查程式所執行的當前目錄是否存在vld.ini的配置檔案,如果有,則載入裡頭的配置進行記憶體檢測執行,如果沒有取預設的配置引數執行,我們可以手動將vld.ini的檔案拷貝到程式的執行目錄中即可。

關於vld.ini的幾個注意的引數:

  1,VLD = on   總開關,是否啟用VLD功能,預設為yes

  2,MaxDataDump = 256  用來顯示檢測到的內在洩露的塊的地址大小,預設256,其實就是顯示多少個byte的內容。

  3,MaxTraceFrames = 64  設定VLD檢測到堆疊的最大層極,也就是frame的深度

  4,ReportFile = xxx  設定VLD生成報告的位置和報告的檔名,預設為:.\memory_leak_report.txt,程式當前執行目錄中。

  5,ReportTo = debugger 設定VLD生成報告的方式,debugger為在控制檯輸出VLD的報告資訊,file在指定目錄下生成報告檔案,both為即輸出也生成報告。如果你的程式為帶窗體的程式,需要設定為file或both.

相關文章