1. 程式人生 > >VLD(Visual LeakDetector)記憶體洩露庫的使用

VLD(Visual LeakDetector)記憶體洩露庫的使用

VLD簡介

    由於C/C++語言沒有所謂的垃圾收集器,記憶體的分配和釋放都需要程式設計師自己來控制,這會給C/C++程式設計師帶來一定的困難。當您的程式越來越複雜時,它的記憶體管理也會變得越來越困難。記憶體洩漏、記憶體越界是最常見的記憶體問題之一。
    記憶體洩漏如果不是很嚴重的話,在短時間內對程式不會造成太大的影響,而且在程序終止的時候,所有分配的記憶體都會釋放掉。但是對於長時間執行的程式,其破壞力是驚人的,從效能下降到記憶體耗盡,甚至會影響到其它程式的正常執行。
    此外,記憶體問題存在一個共同的特點,它本身並不會有很明顯的現象,當有異常出現時就很難檢查問題的原因所在,這給除錯記憶體問題帶來了很大的難度。
VLD是一款用於VisualC++的免費記憶體洩漏檢查工具。可以在codeproject.com網站上找到,相比其它的記憶體洩漏哦給你根據,他在檢查記憶體洩漏的同事,還具有如下特點:
    1)  可以得到記憶體洩漏點的呼叫堆疊,如果可以的話,還可以得到其所在的檔案及行號;
    2)  可以得到洩漏記憶體的完整資料;
    3)  惡意設定記憶體洩漏報告的級別;
    4)  它以動態庫的形式提供,無需編譯原始碼,只需要很小的改動程式;
    5)  原始碼使用GNU許可釋出,並有詳細的文件及其註釋。
    從使用的角度講,VLD簡單易用,對於使用者自己的程式碼中唯一需要修改的地方是#include VLD的標頭檔案後正常執行自己的程式就可以發現記憶體問題。從研究角度上講,如果輸入到VLD原始碼,可以學習到堆記憶體分片與釋放的原理、記憶體檢查的原理機器記憶體操作的常用技巧等。

VLD使用

首先到下面地址下面VLD原始碼包:vld原始碼

下載以後解壓目錄如下:

用VS2015 開啟目錄“.\sourceCode\vld\”下的檔案“vld_vs14.sln”,開啟工程如下:

編譯其中的“vld”工程。

將目錄“.\sourceCode\vld\src\”下的“vld.h”、“vld_def.h”檔案拷貝到我們自己的工程目錄下面(使我們工程能包含“vld.h”標頭檔案)。

將目錄“.\sourceCode\vld\src\bin\Win32\Debug-v140\”(這裡假設我們工程為32位程式,如果是64位程式,到對應的x64目錄下面拷貝)下的“vld.lib”檔案拷貝考我們自己的工程目錄下面(使我們工程能連結到這個庫檔案)。

將目錄“.\sourceCode\vld\src\bin\Win32\Debug-v140\”(這裡假設我們工程為32位程式,如果是64位程式,到對應的x64目錄下面拷貝)下的“vld_x86.dll”檔案拷貝到我們自己工程目錄下的exe可執行檔案相同目錄。

將目錄“.\sourceCode\vld\setup\dbghelp\x86\”(這裡假設我們工程為32位程式,如果是64位程式,到對應的x64目錄下面拷貝)下“dbghelp.dll”、“Microsoft.DTfW.DHL.manifest”檔案拷貝到我們自己工程目錄下的exe可執行檔案相同目錄。

執行完上面操作,所有的配置完成,可以執行程式了。

我這裡寫了一個測試程式如下:

#include "stdafx.h"

#include "vld.h"

int main()
{
	int *p = new int[10];
	//delete[] p;
    return 0;
}

工程配置目錄如下:

可執行檔案目錄如下:

當我們註釋掉語句delete[] p時,程式執行完畢,在VS2015的輸出框會提示如下記憶體洩漏:

如果我們去掉註釋,程式執行完畢,在VS2015的輸出框會提示如下: