欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

VisualStudio 使用Visual Leak Detector檢查內(nèi)存泄漏

 更新時間:2015年07月02日 09:52:32   投稿:hebedich  
這篇文章主要介紹了VisualStudio 使用Visual Leak Detector檢查內(nèi)存泄漏的相關(guān)資料,需要的朋友可以參考下

那么在Windows下有什么好的內(nèi)存泄漏檢測工具呢?微軟提供Visual Studio開發(fā)工具本身沒有什么太好的內(nèi)存泄漏檢測功能,我們可以使用第三方工具Visual Leak Detector(以下簡稱vld)。

vld工具是VC++環(huán)境下一款小巧易用、免費開源的內(nèi)存泄漏檢測工具,vld可以顯示導(dǎo)致內(nèi)存泄漏的完整內(nèi)存分配調(diào)用堆棧。vld的檢測報告能夠?qū)γ總€內(nèi)存泄漏點提供完整的堆棧跟蹤,并且包含其源文件及行號信息。

安裝過程是,先在到地址http://vld.codeplex.com/下載vld安裝文件,然后進行安裝,安裝過程中需要安裝程序會配置環(huán)境變量。我們需要記住安裝目錄。

安裝完成后打開要檢測的Visual Studio工程,我們需要在工程中配置:vld頭文件目錄和vld庫目錄。

選中游戲工程,打開菜單“項目”→ “屬性”彈出工程屬性對話框,如圖所示,選擇“配置屬性”→“VC++目錄” →“常規(guī)”,在右邊的“包含目錄”中添加C:\Program Files (x86)\Visual Leak Detector\include,其中C:\Program Files (x86)\Visual Leak Detector是我的vld安裝目錄?!皫炷夸洝敝刑砑覥:\Program Files (x86)\Visual Leak Detector\lib\Win32,注意配置目之間需要用分號分隔開。

配置完成之后點擊確定按鈕關(guān)閉對話框,然后我們需要在程序代碼中引入頭文件#include <vld.h>,但是這個頭文件在哪里引入比較好?如果是普通的一個VC++工程在哪里引入都無所謂,但是Cocos2d-x的工程就不同了,我們需要考慮跨平臺,#include <vld.h>代碼不宜添加到Classes目錄下的h或cpp文件中,這個目錄下的文件是要在其它平臺編譯運行的,而#include <vld.h>只是在Windrows平臺才有效。我們可以在Win32目錄(見圖)下的main.cpp或main.h文件引入頭文件。這些文件是與Win32平臺有關(guān)的,不同平臺移植的時候不需要。

如果在main.cpp中引入代碼如下:

#include "main.h" 
#include "AppDelegate.h" 
#include "cocos2d.h" 
  
#include <vld.h> 
  
USING_NS_CC; 
  
int APIENTRY _tWinMain(HINSTANCE hInstance, 
            HINSTANCE hPrevInstance, 
            LPTSTR  lpCmdLine, 
            int    nCmdShow) 
{ 
  UNREFERENCED_PARAMETER(hPrevInstance); 
  UNREFERENCED_PARAMETER(lpCmdLine); 
  
  // create the application instance 
  AppDelegate app; 
  return Application::getInstance()->run(); 
} 

引入之后,就測試一下了,我們來人為制造一個內(nèi)存泄漏,與20.1.1一節(jié)一樣在HelloWorldScene.cpp中修改代碼:

bool HelloWorld::init() 
{ 
if ( !Layer::init() ) 
{ 
return false; 
} 
  __String *s = new __String(); 
  
  log("%s",s->getCString()); 
  
… … 
  
return true; 
} 

運行工程,需要注意的是在程序運行過程中vld是沒有堆棧輸出的,但是日志會有輸出vld的安裝信息,日志信息如下:

Visual Leak Detector Version 2.4RC2 installed.

Ready for GLSL

Ready for OpenGL 2.0

… …

從日志中可以看到vld是否安裝成功,以及安裝的版本。要想看到vld檢測報告需要退出程序后,才會在日志中輸出信息。使用Cocos2d-x會輸出很多日志信息,信息如下:

---------- Block 526166 at 0x0821FA80: 84 bytes ----------

 Leak Hash: 0x780B2033, Count: 1, Total 84 bytes

 Call Stack (TID 4660):

... ...

---------- Block 526214 at 0x08224378: 8 bytes ----------

 Leak Hash: 0xE1DC1852, Count: 1, Total 8 bytes

 Call Stack (TID 4660):

... ...

 Data:

  63 6F 63 6F  73 32 64 20  61 75 74 6F  72 65 6C 65   cocos2d. autorele

  61 73 65 20  70 6F 6F 6C  00 CD CD CD  CD CD CD CD   ase.pool ........

Visual Leak Detector detected 33 memory leaks (2892 bytes).

Largest number used: 3204961 bytes.

Total allocations: 69022415 bytes.

Visual Leak Detector is now exiting.

其中一個Block表示一個內(nèi)存泄漏點,在眾多Block如果能夠找到關(guān)于我們自己類的日志信息呢?我們可以查找關(guān)鍵字“helloworldscene.cpp”,這就可以定位到HelloWorld場景中的內(nèi)存泄漏的Block了,我們找到如下日志信息:

---------- Block 1153 at 0x01533C70: 48 bytes ----------

 Leak Hash: 0x5545A5ED, Count: 1, Total 48 bytes

 Call Stack (TID 2088):

  f:\dd\vctools\crt_bld\self_x86\crt\src\new.cpp (57): MSVCR110D.dll!operator new

  d:\helloworld\classes\helloworldscene.cpp (33): HelloWorld.exe!HelloWorld::init + 0x7 bytes

  d:\helloworld\classes\helloworldscene.h (37): HelloWorld.exe!HelloWorld::create + 0xB1 bytes

  d:\helloworld\classes\helloworldscene.cpp (12): HelloWorld.exe!HelloWorld::createScene + 0x5 bytes

  d:\helloworld\classes\appdelegate.cpp (30): HelloWorld.exe!AppDelegate::applicationDidFinishLaunching + 0x5 bytes

  d:\helloworld\cocos2d\cocos\2d\platform\win32\ccapplication.cpp (74): HelloWorld.exe!cocos2d::Application::run + 0xF bytes

  d:\helloworld\proj.win32\main.cpp (19): HelloWorld.exe!wWinMain + 0xC bytes

  f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (528): HelloWorld.exe!__tmainCRTStartup + 0x15 bytes

  f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (377): HelloWorld.exe!wWinMainCRTStartup

  0x7563850D (File and line number not available): KERNEL32.DLL!BaseThreadInitThunk + 0xE bytes

  0x77B7BF39 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x85 bytes

  0x77B7BF0C (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x58 bytes

 Data:

  1C 34 07 01  01 00 00 00  27 00 00 00  00 00 00 00   .4...... '.......

  2C 34 07 01  A0 77 01 03  00 CD CD CD  CD CD CD CD   ,4...w.. ........

  CD CD CD CD  CD CD CD CD  00 00 00 00  0F 00 00 00   ........ ........

從這個日志中能看到內(nèi)存泄漏點,從日志的堆棧中找到我們自己編寫的類,點擊那一行打開代碼窗口,定位內(nèi)存泄漏點代碼,如圖所示。

定位內(nèi)存泄漏點

找到哪一個有可能有內(nèi)存泄漏,解決就不是問題了。

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • C++任意線程通過hwnd實現(xiàn)將操作發(fā)送到UI線程執(zhí)行

    C++任意線程通過hwnd實現(xiàn)將操作發(fā)送到UI線程執(zhí)行

    做Windows界面開發(fā)時,經(jīng)常需要在多線程環(huán)境中將操作拋到主線程執(zhí)行,下面我們就來學(xué)習(xí)一下如何在不需要重新定義消息以及接收消息的情況下實現(xiàn)這一要求,感興趣的可以了解下
    2024-03-03
  • 一文學(xué)會數(shù)據(jù)結(jié)構(gòu)-堆

    一文學(xué)會數(shù)據(jù)結(jié)構(gòu)-堆

    本文主要介紹了數(shù)據(jù)結(jié)構(gòu)-堆,文中通過圖片和大量的代碼講解的非常詳細,需要學(xué)習(xí)的朋友可以參考下這篇文章,希望可以幫助到你
    2021-08-08
  • 在vscode中快速新建html文件的2種方法總結(jié)

    在vscode中快速新建html文件的2種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于在vscode中快速新建html文件的2種方法,以及如何快速打開HTML文件查看編輯效果的方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • 淺析C++中的虛函數(shù)

    淺析C++中的虛函數(shù)

    以下是對C++中的虛函數(shù)進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • C++ 中 socket編程實例詳解

    C++ 中 socket編程實例詳解

    這篇文章主要介紹了C++ 中 socket編程實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言學(xué)籍管理系統(tǒng)源代碼

    C語言學(xué)籍管理系統(tǒng)源代碼

    這篇文章主要為大家詳細介紹了C語言學(xué)籍管理系統(tǒng)源代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 深入學(xué)習(xí)C++智能指針之shared_ptr與右值引用的方法

    深入學(xué)習(xí)C++智能指針之shared_ptr與右值引用的方法

    智能指針的核心實現(xiàn)技術(shù)是引用計數(shù),每使用它一次,內(nèi)部引用計數(shù)加1,每析構(gòu)一次內(nèi)部的引用計數(shù)減1,減為0時,刪除所指向的堆內(nèi)存,今天通過本文給大家分享C++智能指針之shared_ptr與右值引用的方法,需要的朋友跟隨小編一起看看吧
    2021-07-07
  • 基于OpenCV?差分法實現(xiàn)綠葉識別

    基于OpenCV?差分法實現(xiàn)綠葉識別

    物體識別是圖像處理學(xué)在現(xiàn)實生活中較多的應(yīng)用之一,本文提供了一種相對簡單的思路來實現(xiàn)綠葉識別,適合初學(xué)圖像處理的新人研究參考。感興趣的同學(xué)可以關(guān)注一下
    2021-11-11
  • C++ tuple元組的基本用法(總結(jié))

    C++ tuple元組的基本用法(總結(jié))

    這篇文章主要介紹了C++ tuple元組的基本用法(總結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解C++中動態(tài)內(nèi)存管理和泛型編程

    詳解C++中動態(tài)內(nèi)存管理和泛型編程

    這篇文章主要為大家詳細介紹了C++中動態(tài)內(nèi)存管理和泛型編程的相關(guān)資料,文中示例代碼講解詳細,對我們學(xué)習(xí)C++具有一定幫助,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一
    2022-10-10

最新評論