1. 程式人生 > >VLD(C++記憶體檢測工具學習2)

VLD(C++記憶體檢測工具學習2)

本文簡要描述一下在Qt應用中使用VLD來檢測記憶體洩露。本次測試環境:QtCreator2.3 + Qt4.7.4-vs2008 + VS2008 Express.

假定安裝到c:/dev/vld-2.2目錄下。

注:vld最初發表在codeproject.com,這個版本太老了。檢測不準,不能使用。

2、建立測試專案:使用QtCreator建立一個Qt GUI專案。

修改.pro檔案,新增如下內容:

  1. win32 {  
  2.     CONFIG(debug, debug|release) {  
  3. #        DEFINES += _DEBUG
  4.         # vld 2.2 downloaded from http://vld.codeplex.com/
  5.         VLD_PATH = c:/dev/vld-2.2  
  6.         INCLUDEPATH += $VLD_PATH/include  
  7.         LIBS += -L$VLD_PATH/lib/Win32 -lvld  
  8.     }  
  9. }  

修改main.cpp檔案,在main函式上面新增以下程式碼:

  1. #ifdef _DEBUG
  2. #include "vld.h"
  3. #endif
3、進行測試:

測試1:在MainWindow的建構函式中新增一行程式碼:

  1. new QWidget(this); // 不會洩露  

編譯執行,在QtCreator的應用程式輸出視窗中將會有類似下面的內容:
  1. Visual Leak Detector Version 2.2 installed.  
  2. Visual Leak Detector Version 2.2 installed.  
  3. No memory leaks detected.  
  4. Visual Leak Detector is now exiting.  
以上表示沒有發現記憶體洩露。

(初次執行時可能無法執行,這是因為找不到vld的dll檔案。將C:\dev\vld-2.2\bin\Win32目錄下的內容拷貝到PATH環境變數中所列的某個目錄即可)

測試2:再新增一行程式碼:

  1. new QWidget(0); // 這個會洩露
再次編譯執行,結果為:
  1. Visual Leak Detector Version 2.2 installed.  
  2. WARNING: Visual Leak Detector detected memory leaks!  
  3. ---------- Block 8 at 0x00EF14E0: 20 bytes ----------  
  4.   Call Stack:  
  5.     e:\works\test_vld_qt\mainwindow.cpp (18): test_vld_qt.exe!MainWindow::MainWindow + 0x7 bytes  
  6.     e:\works\test_vld_qt\main.cpp (10): test_vld_qt.exe!main + 0xA bytes  
  7.     e:\qt\4.7.4-vs2008\src\winmain\qtmain_win.cpp (131): test_vld_qt.exe!WinMain + 0x12 bytes  
  8.     f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (578): test_vld_qt.exe!__tmainCRTStartup + 0x35 bytes  
  9.     f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (403): test_vld_qt.exe!WinMainCRTStartup  
  10.     0x7C817067 (File and line number not available): kernel32.dll!RegisterWaitForInputIdle + 0x49 bytes  
  11.   Data:  
  12.     8C 8A 40 00    F8 81 F1 00    68 8A 40 00    00 00 CD CD     [email protected] [email protected]  
  13.     B0 82 F1 00                                                  ........ ........  
  14. Visual Leak Detector detected 1 memory leak (56 bytes).  
  15. Largest number used: 432 bytes.  
  16. Total allocations: 432 bytes.  
  17. Visual Leak Detector is now exiting.  
這次檢測到了記憶體洩露。


小結:如上所示,使用vld檢測記憶體洩露很容易,美中不足的是隻能使用VC++編譯器。儘管如此,我們也可以用它來在Win32下檢測記憶體洩露,然後再使用其它編譯器在其它平臺上進行編譯釋出。


相關推薦

VLD(C++記憶體檢測工具學習2)

本文簡要描述一下在Qt應用中使用VLD來檢測記憶體洩露。本次測試環境:QtCreator2.3 + Qt4.7.4-vs2008 + VS2008 Express. 假定安裝到c:/dev/vld-2.2目錄下。 注:vld最初發表在codeproject.com,這個

Visual Leak Detector 2.2.3 Visual C++記憶體檢測工具

         Visual Leak Detector是一款免費的、健全的、開源的Visual C++記憶體洩露檢測系統。相比Visual C++自帶的記憶體檢測機制,Visual Leak De

C/C++】 記憶體檢測工具 memeory check

Backto C/C++ Index *nix – Valgrind: Valgrind是一款用於記憶體除錯、記憶體洩漏檢測以及效能分析的軟體開發工具。Valgrind這個名字取自北歐神話中英靈殿的入口。 Valgrind的最初作者是Julian Seward

C++記憶體檢查工具valgrind

安裝apt-get install valgrind注意在Ubuntu 16.10上,需要python2為預設python版本。執行啟動C++程式前加上valgrind即可。valgrind ./bui

.NET Memory Profiler 託管環境記憶體檢測工具,.net記憶體回收與Dispose﹐Close﹐Finalize方法

2.使用物件 3.釋放物件 二.建立物件 1.建立物件實際分為兩個步驟?變數型別宣告和初始化物件 2.變數型別宣告(declare),如? FileStream fs 這行程式碼會在當前的變數作用域空間(棧或堆)裡建立一個叫做fs的變數?至少四個位元組吧(因為要存一個物件的地址) 3.初始化物件

記憶體檢測工具使用(Linux、VS)

一、Linux中記憶體檢測工具(valgrind) 記憶體檢查工具: valgrind linux上線上安裝:yum install valgrind 使用方法:     valgrind 你的

Windows和Linux記憶體檢測工具:Valgrind,Visual Leak Detector,CppCheck, Cpplint

1 Linux記憶體洩漏檢測工具ValgrindValgrind簡介        Valgrind是一套Linux下,開放原始碼(GPL V2)的模擬除錯工具的集合。Valgrind由核心(core)以及基於核心的其他除錯工具組成。核心類似於一個框架(framework),

iOS記憶體檢測工具Analyze的使用

XCode的Analyze可以分析到專案哪裡有記憶體洩露. 方法:xcode----product-----Analyze(快捷鍵:Shift + Cmd + B) iOS的分析工具可以發現編譯中的warning,記憶體洩漏隱患,甚至還可以檢查出log

非常好用的記憶體檢測工具

推薦理由:準確、快速大家比較熟悉的記憶體檢測工具有MemTest、微軟記憶體檢測(Microsoft Memory Diagnostic)等。但就本人的使用經歷來說,微軟的記憶體檢測工具更實用一些。下載地址:http://www.box.net/shared/03b7xbvk

Android 記憶體檢測工具

所謂記憶體洩漏,是指本該被回收的記憶體由於某種原因繞開了GC回收演算法,從而導致該記憶體無法被有效資料使用而使得總記憶體減小的情況。 記憶體洩漏會導致記憶體消耗的增加,大量的消耗會使得APP OOM,特別是在一些記憶體比較小的機器上。下面我們看看有哪些工具可以

Linux下記憶體檢測工具:asan

 Linux下記憶體檢測工具:asan ASAN(Address-Sanitizier)早先是LLVM中的特性,後被加入GCC 4.8,在GCC 4.9後加入對ARM平臺的支援。因此GCC

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

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

使用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

c++記憶體洩漏檢測工具(上)

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

C 記憶體洩漏檢測工具

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

Unix下C程式記憶體洩漏檢測工具Valgrind安裝與使用

                Valgrind是一款用於記憶體除錯、記憶體洩漏檢測以及效能分析的軟體開發工具。 Valgrind的最初作者是Julian Seward,他於2006年由於在開發Valgrind上的工作獲得了第二屆Google-O'Reilly開原始碼獎。 Valgrind遵守GNU通用公共許

Windows 7 下 vs2010記憶體洩漏檢測工具VLD的使用

1 環境和軟體 Windows7 32位系統    Visual Studio 2012 旗艦版    vld-2.2.3-setup.exe  大小1.04M 2 步驟   1)下載安裝 下載好 vld-2.2.3-setup.exe(大小1.04

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

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

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

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