最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

如果在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(); 
} 

引入之后,就測(cè)試一下了,我們來(lái)人為制造一個(gè)內(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; 
} 

運(yùn)行工程,需要注意的是在程序運(yùn)行過(guò)程中vld是沒(méi)有堆棧輸出的,但是日志會(huì)有輸出vld的安裝信息,日志信息如下:

Visual Leak Detector Version 2.4RC2 installed.

Ready for GLSL

Ready for OpenGL 2.0

… …

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

---------- 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.

其中一個(gè)Block表示一個(gè)內(nèi)存泄漏點(diǎn),在眾多Block如果能夠找到關(guān)于我們自己類(lèi)的日志信息呢?我們可以查找關(guān)鍵字“helloworldscene.cpp”,這就可以定位到HelloWorld場(chǎng)景中的內(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   ........ ........

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

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

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

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

相關(guān)文章

  • C語(yǔ)言編程數(shù)據(jù)結(jié)構(gòu)線性表之順序表和鏈表原理分析

    C語(yǔ)言編程數(shù)據(jù)結(jié)構(gòu)線性表之順序表和鏈表原理分析

    本篇文章是C語(yǔ)言編程篇主要為大家介紹了C語(yǔ)言編程中的數(shù)據(jù)結(jié)構(gòu)線性表,文中附含豐富的圖文示例代碼為大家詳解了線性表中的順序表和鏈表,有需要的朋友可以借鑒參考下
    2021-09-09
  • C語(yǔ)言循環(huán)隊(duì)列與用隊(duì)列實(shí)現(xiàn)棧問(wèn)題解析

    C語(yǔ)言循環(huán)隊(duì)列與用隊(duì)列實(shí)現(xiàn)棧問(wèn)題解析

    循環(huán)隊(duì)列又叫環(huán)形隊(duì)列,是一種特殊的隊(duì)列。循環(huán)隊(duì)列解決了隊(duì)列出隊(duì)時(shí)需要將所有數(shù)據(jù)前移一位的問(wèn)題,本篇帶你一起看看循環(huán)隊(duì)列的問(wèn)題和怎樣用隊(duì)列實(shí)現(xiàn)棧
    2022-04-04
  • C++實(shí)例講解引用的使用

    C++實(shí)例講解引用的使用

    引用是C++一個(gè)很重要的特性,顧名思義是某一個(gè)變量或?qū)ο蟮膭e名,對(duì)引用的操作與對(duì)其所綁定的變量或?qū)ο蟮牟僮魍耆葍r(jià),這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識(shí)點(diǎn),需要的朋友可以參考下
    2022-05-05
  • 詳解如何配置CLion作為Qt5開(kāi)發(fā)環(huán)境的方法

    詳解如何配置CLion作為Qt5開(kāi)發(fā)環(huán)境的方法

    這篇文章主要介紹了詳解如何配置CLion作為Qt5開(kāi)發(fā)環(huán)境的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C語(yǔ)言的運(yùn)算符你了解嗎

    C語(yǔ)言的運(yùn)算符你了解嗎

    這篇文章主要介紹了C語(yǔ)言中的運(yùn)算符,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下,希望能給你帶來(lái)幫助
    2021-08-08
  • C++使用easyx實(shí)現(xiàn)打磚塊游戲

    C++使用easyx實(shí)現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細(xì)介紹了C++使用easyx實(shí)現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++ 類(lèi)模板、函數(shù)模板全特化、偏特化的使用

    C++ 類(lèi)模板、函數(shù)模板全特化、偏特化的使用

    這篇文章主要介紹了C++ 類(lèi)模板、函數(shù)模板全特化、偏特化的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • VS中scanf函數(shù)報(bào)錯(cuò)問(wèn)題的幾種解決方法

    VS中scanf函數(shù)報(bào)錯(cuò)問(wèn)題的幾種解決方法

    本文主要介紹了VS中scanf函數(shù)報(bào)錯(cuò)問(wèn)題的幾種解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 深入理解:Java是類(lèi)型安全的語(yǔ)言,而C++是非類(lèi)型安全的語(yǔ)言

    深入理解:Java是類(lèi)型安全的語(yǔ)言,而C++是非類(lèi)型安全的語(yǔ)言

    本篇文章是對(duì)Java是類(lèi)型安全的語(yǔ)言,而C++是非類(lèi)型安全的語(yǔ)言進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • C語(yǔ)言詳細(xì)講解qsort函數(shù)的使用

    C語(yǔ)言詳細(xì)講解qsort函數(shù)的使用

    排序方法有很多種:選擇排序,冒泡排序,歸并排序,快速排序等??疵侄贾揽焖倥判蚴悄壳肮J(rèn)的一種比較好的排序算法。因?yàn)樗俣群芸欤韵到y(tǒng)也在庫(kù)里實(shí)現(xiàn)這個(gè)算法,便于我們的使用。這就是qsort函數(shù)
    2022-04-04

最新評(píng)論

栾城县| 赤壁市| 杭锦后旗| 盐津县| 惠东县| 祁门县| 潞西市| 阜城县| 开江县| 吉隆县| 洛川县| 拜城县| 封开县| 安平县| 女性| 乌兰浩特市| 象州县| 浮山县| 巴彦县| 靖安县| 仙游县| 忻州市| 财经| 卢湾区| 宁武县| 临西县| 辽宁省| 彩票| 南郑县| 保靖县| 宁化县| 唐山市| 昭通市| 蓬莱市| 杭州市| 邳州市| 台东县| 陵川县| 绵阳市| 泰来县| 湘潭市|