1. 程式人生 > >Visual C++ 記憶體洩露檢測工具(VLD)

Visual C++ 記憶體洩露檢測工具(VLD)

簡述

C/C++ 程式越複雜,記憶體的管理顯得越重要,稍有不慎就會出現洩漏。如果記憶體洩漏不是很嚴重,在短時間內對程式不會有太大影響,這也使得記憶體洩漏問題有很強的隱蔽性,不易被發現。然而不管記憶體洩漏多麼輕微,當程式長時間執行時,其破壞力是驚人的 - 從效能下降到記憶體耗盡,甚至會影響其他程式的正常執行。

|

VLD

VLD(Visual Leak Detector)是一款用於 Visual C++ 的免費記憶體洩露檢測工具。相比較其它記憶體洩露檢測工具,它在檢測到記憶體洩漏的同時,還具有如下特點:

  • 可以得到記憶體洩漏點的呼叫堆疊,如果可以的話,還能得到其所在檔案及行號;
  • 可以得到洩露記憶體的完整資料;
  • 可以設定記憶體洩露報告的級別;
  • 它是一個已經打包的 lib,使用時無須編譯原始碼。對於使用者自己的程式碼,只需要做很小的改動;
  • 原始碼使用 GNU 許可釋出,並有詳盡的文件及註釋。對於想深入瞭解堆記憶體管理的讀者,是一個不錯的選擇。

可見,VLD 簡單易用。只需要做很小的改動(新增庫幷包含標頭檔案),然後正常執行自己的程式,就可以發現記憶體問題;如果深入原始碼,可以學習到堆記憶體分配與釋放的原理、記憶體洩漏檢測的原理及記憶體操作的常用技巧等。

下載、安裝

這裡寫圖片描述

進入主頁後,點選【download】按鈕進行下載 VLD 最新版本,或者在“DOWNLOADS”頁面查詢其它更多版本。

下載完成後,進行安裝(傻瓜式 - 下一步)。

安裝後的資料夾中主要包括:

  • bin:包含 dbghelp.dll、vld_x86.dll 檔案
  • include:包含 vld.h、vld_def.h 檔案
  • lib:包含 vld.lib 檔案

使用

Visual Studio

新建一個 Win32 控制檯應用程式,新增如下程式碼:

#include "stdafx.h"
#include "vld.h"

int _tmain(int argc, _TCHAR* argv[])
{
    char *pBuf = new char[200];

    return 0;
}

配置專案:

  • C/C++ -> 常規 -> 附加包含目錄:D:\Program Files\Visual Leak Detector\include
  • 連結 -> 常規 -> 附加庫目錄:D:\Program Files\Visual Leak Detector\lib\Win32

在 Debug 模式下執行,將會輸出如下資訊:

這裡寫圖片描述

報告列出了記憶體洩露是在第幾塊、所在的地址、洩露的位元組、呼叫的堆疊、記憶體內容。雙擊呼叫堆疊可以跳轉到所在行。

Qt

新建一個 Qt Console Application,在 .pro 檔案中新增如下內容:

# 只有在 Win32 下才可使用
win32 {
    CONFIG(debug, debug|release) {  # 需要基於 Debug 模式
        DEFINES += VLD_MODULE
        VLD_PATH = "D:/Program Files/Visual Leak Detector"
        INCLUDEPATH += $${VLD_PATH}/include
        LIBS += -L$${VLD_PATH}/lib/Win32 -lvld
    }
}

main.cpp 檔案如下所示:

#include <QCoreApplication>

// 新增 VLD 標頭檔案
#ifdef VLD_MODULE
#include "vld.h"
#endif

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    char *pBuf = new char[200];

    return a.exec();
}

編譯執行,在 Qt Creator 的應用程式輸出視窗中將會出現和 Visual Studio 中類似的記憶體洩露資訊。

使用 VLD 檢測記憶體洩露很容易,但在使用過程中,需要注意以下幾點:

  1. 需要在 Debug 模式下使用。如果是 Release 模式,則不會連結 VLD。
  2. 只能使用 VC++ 編譯器。這也是美中不足的一點,如果使用 Qt,只能先使用 VC++ 編譯器捕捉並解決記憶體洩露,再考慮使用 mingw(gcc/g++)編譯程式。

更多參考

相關推薦

Visual C++ 記憶體洩露檢測工具VLD

簡述 C/C++ 程式越複雜,記憶體的管理顯得越重要,稍有不慎就會出現洩漏。如果記憶體洩漏不是很嚴重,在短時間內對程式不會有太大影響,這也使得記憶體洩漏問題有很強的隱蔽性,不易被發現。然而不管記憶體洩漏多麼輕微,當程式長時間執行時,其破壞力是驚人的 - 從效能

c++記憶體洩漏檢測工具

原文連結: http://blog.csdn.net/beanjoy/article/details/7578372   1/  VC自帶的CRT:_CrtCheckMemory   偵錯程式和 CRT 除錯堆函式 用法 /********

使用Visual Leak Detector for Visual C++ 捕捉記憶體洩露---Visual C++記憶體洩露檢測VLD工具使用說明

以下經過測試: 使用Visual Leak Detector for Visual C++ 捕捉記憶體洩露 1、下載vlc 2、建立應用並配置 c/c++ -> General -> Additional Include Directories = C:\P

Visual C++記憶體洩露檢測VLD工具使用說明d

轉自:http://www.cnblogs.com/lidabo/archive/2012/07/19/2599745.html http://blog.csdn.net/zlQQhs/article/details/10039179 1.VLD工具概述 Visual

Windows/Linux下C/C++記憶體洩露檢測工具

一 Window下的記憶體洩露檢測(以VC++環境為例) 靈活自由是C語言的一大特色,但這個特色也難以避免的帶來一些副作用,比如記憶體洩露。眾所周知,記憶體洩露的問題比較複雜,程式正常執行時你看不出它有任何異常,但長時間執行或在特定條件下特定操作重複多次時,它才暴露出來。所

Mac下C++記憶體洩露檢測工具

1) nvwa(寓意女媧補天,從sourceforge下載),直接將其程式碼編譯到工程中,發現有洩露後程序即終止; nvwa能夠檢測到記憶體洩露問題,但是試用後感覺不穩定 2) leaks命令,能確

Linux C 程式設計記憶體洩露檢測工具(二):memwatch

Memwatch簡介 在三種檢測工具當中,設定最簡單的算是memwatch,和dmalloc一樣,它能檢測未釋放的記憶體、同一段記憶體被釋放多次、位址存取錯誤及不當使用未分配之記憶體區域。請往http://www.linkdata.se/sourcecode.html下載最

C 記憶體洩漏檢測工具

所有使用動態記憶體分配(dynamic memory allocation)的程式都有機會遇上記憶體洩露(memory leakage)問題,在Linux裡有三種常用工具來檢測記憶體洩露的情況,包括: mtrace dmalloc memwatch 1. mtrace

linux下記憶體洩露檢測工具Valgrind介紹

一、工作中一個記憶體洩漏問題的解決過程: 問題背景:我司裝置上執行有多個程序,在裝置執行兩天後,程序jsman所佔用的記憶體達到了1200M bytes(通過ps -aux檢視)。 解決步驟: 確定裝置上的軟體版本,根據git的commit號資訊回退

精準 iOS 記憶體洩露檢測工具----MLeaksFinder

背景 平常我們都會用 Instrument 的 Leaks / Allocations 或其他一些開源庫進行記憶體洩露的排查,但它們都存在各種問題和不便,我們逐個來看這些工具的使用和存在的問題。 Leaks 先看看 Leaks,從蘋果的開發者文件裡可以看到,一個 app 的記憶體分三類:

c++記憶體洩露檢測

// 以下程式碼在vs2013上面測試#include <stdlib.h> #include <crtdbg.h> // 在入口函式中包含 _CrtDumpMemoryLeaks(); // 即可檢測到記憶體洩露 typedef void* HObjec

C++記憶體洩露檢查工具

Linux下編寫C或者C++程式,有很多工具,但是主要編譯器仍然是gcc和g++。最近用到STL中的List程式設計,為了檢測寫的程式碼是否會發現記憶體洩漏,瞭解了一下相關的知識。 所有使用動態記憶體分配(dynamic memory allocation)的程式都有機

Android記憶體洩露檢測工具和實際開發中遇到的記憶體洩露問題解析

介紹 記憶體洩露是平常開發中經常遇到的,有些時候稍不注意就會發生,而且還不易察覺,這就需要工具來幫助檢測。本文主要介紹記憶體檢測工具和我在開發中遇到的記憶體洩露問題和解決方案。 記憶體洩露的原理 具體的原理涉及到虛擬機器垃圾回收機制知識,這裡只為下文作

iOS-記憶體洩露檢測工具(MLeaksFinder)

MLeaksFinder MLeaksFinder helps you find memory leaks in your iOS apps at develop time. It can automatically find leaks in UIVi

初識記憶體洩露檢測工具VisualLeakDetector

VLD為vc++下的記憶體洩露檢測工具 1、首先下載安裝vld,直接下載安裝包,安裝過程中會直接新增環境變數。 2、在安裝目錄下有vld.h, vldapi.h, vld.lib, vldmt.lib, vldmtdll.lib, dbghelp.dll等檔

linux C記憶體洩露檢測實現及記憶體洩露檢測的一般方法

linux中,由於使用malloc或alloc而沒有free掉申請的記憶體,就會造成記憶體的洩露。通常,來講為了避免記憶體洩露的情況出現,一般要求,我們儘量的malloc之後,呼叫free。但是總會有忘記free的時候啊。一般可以有如下幾種方式來避免記憶體洩露: 1) 

記憶體洩露檢測工具比較

1.     ccmalloc-Linux和Solaris下對C和C++程式的簡單的使用記憶體洩漏和malloc除錯庫。 2.     Dmalloc-Debug Malloc Library. 3.     Electric Fence-Linux分發版中

Wince記憶體洩露檢測工具Application Verifier的使用和如何快速定位洩露語句(二)

通過Application Verifier在wince端生成日誌檔案後,我們將檔案拷貝到PC上通過PC端的工具進行日誌分析,我們就可以定位出洩漏地址的程式碼行位置了,這裡有個前提條件,那就是需要我們在編譯程式時將程式的除錯資訊開啟,VS2008設定選項配置方法如下: 1.

c/c++記憶體洩漏檢測工具

1、  可以得到記憶體洩漏點的呼叫堆疊,如果可以的話,還可以得到其所在檔案及行號; 2、  可以得到洩露記憶體的完整資料; 3、  可以設定記憶體洩露報告的級別; 4、  它是一個已經打包的lib,使用時無須編譯它的原始碼。而對於使用者自己的程式碼,也只需要做很小的改動; 5、

Linux C/C++ 記憶體洩漏檢測工具Valgrind

下面是一段有問題的C程式程式碼test.c #i nclude <stdlib.h> void f(void) { int* x = malloc(10 * sizeof(int)); x[10] = 0; //問題1: 陣列下標越界 } //問