亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

VisualStudio 使用Visual Leak Detector檢查內存泄漏

2020-05-23 14:19:27
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了VisualStudio 使用Visual Leak Detector檢查內存泄漏的相關資料,需要的朋友可以參考下

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

vld工具是VC++環境下一款小巧易用、免費開源的內存泄漏檢測工具,vld可以顯示導致內存泄漏的完整內存分配調用堆棧。vld的檢測報告能夠對每個內存泄漏點提供完整的堆棧跟蹤,并且包含其源文件及行號信息。

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

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

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

VisualStudio 使用Visual Leak Detector檢查內存泄漏

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

VisualStudio 使用Visual Leak Detector檢查內存泄漏

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

 

 
  1. #include "main.h"  
  2. #include "AppDelegate.h"  
  3. #include "cocos2d.h"  
  4.  
  5. #include <vld.h>  
  6.  
  7. USING_NS_CC;  
  8.  
  9. int APIENTRY _tWinMain(HINSTANCE hInstance,  
  10. HINSTANCE hPrevInstance,  
  11. LPTSTR lpCmdLine,  
  12. int nCmdShow)  
  13. {  
  14. UNREFERENCED_PARAMETER(hPrevInstance);  
  15. UNREFERENCED_PARAMETER(lpCmdLine);  
  16.  
  17. // create the application instance  
  18. AppDelegate app;  
  19. return Application::getInstance()->run();  
  20. }  

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

 

 
  1. bool HelloWorld::init()  
  2. {  
  3. if ( !Layer::init() )  
  4. {  
  5. return false;  
  6. }  
  7. __String *s = new __String();  
  8.  
  9. log("%s",s->getCString());  
  10.  
  11. … …  
  12.  
  13. return true;  
  14. }  

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

Visual Leak Detector Version 2.4RC2 installed.

Ready for GLSL

Ready for OpenGL 2.0

… …

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

 

 
  1. ---------- Block 526166 at 0x0821FA80: 84 bytes ---------- 
  2.  
  3. Leak Hash: 0x780B2033, Count: 1, Total 84 bytes 
  4.  
  5. Call Stack (TID 4660): 
  6.  
  7. ... ... 
  8.  
  9. ---------- Block 526214 at 0x08224378: 8 bytes ---------- 
  10.  
  11. Leak Hash: 0xE1DC1852, Count: 1, Total 8 bytes 
  12.  
  13. Call Stack (TID 4660): 
  14.  
  15. ... ... 
  16.  
  17. Data: 
  18.  
  19. 63 6F 63 6F 73 32 64 20 61 75 74 6F 72 65 6C 65 cocos2d. autorele 
  20.  
  21. 61 73 65 20 70 6F 6F 6C 00 CD CD CD CD CD CD CD ase.pool ........ 
  22.  
  23. Visual Leak Detector detected 33 memory leaks (2892 bytes). 
  24.  
  25. Largest number used: 3204961 bytes. 
  26.  
  27. Total allocations: 69022415 bytes. 
  28.  
  29. Visual Leak Detector is now exiting. 

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

  1. ---------- Block 1153 at 0x01533C70: 48 bytes ---------- 
  2.  
  3. Leak Hash: 0x5545A5ED, Count: 1, Total 48 bytes 
  4.  
  5. Call Stack (TID 2088): 
  6.  
  7. f:/dd/vctools/crt_bld/self_x86/crt/src/new.cpp (57): MSVCR110D.dll!operator new 
  8.  
  9. d:/helloworld/classes/helloworldscene.cpp (33): HelloWorld.exe!HelloWorld::init + 0x7 bytes 
  10.  
  11. d:/helloworld/classes/helloworldscene.h (37): HelloWorld.exe!HelloWorld::create + 0xB1 bytes 
  12.  
  13. d:/helloworld/classes/helloworldscene.cpp (12): HelloWorld.exe!HelloWorld::createScene + 0x5 bytes 
  14.  
  15. d:/helloworld/classes/appdelegate.cpp (30): HelloWorld.exe!AppDelegate::applicationDidFinishLaunching + 0x5 bytes 
  16.  
  17. d:/helloworld/cocos2d/cocos/2d/platform/win32/ccapplication.cpp (74): HelloWorld.exe!cocos2d::Application::run + 0xF bytes 
  18.  
  19. d:/helloworld/proj.win32/main.cpp (19): HelloWorld.exe!wWinMain + 0xC bytes 
  20.  
  21. f:/dd/vctools/crt_bld/self_x86/crt/src/crtexe.c (528): HelloWorld.exe!__tmainCRTStartup + 0x15 bytes 
  22.  
  23. f:/dd/vctools/crt_bld/self_x86/crt/src/crtexe.c (377): HelloWorld.exe!wWinMainCRTStartup 
  24.  
  25. 0x7563850D (File and line number not available): KERNEL32.DLL!BaseThreadInitThunk + 0xE bytes 
  26.  
  27. 0x77B7BF39 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x85 bytes 
  28.  
  29. 0x77B7BF0C (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x58 bytes 
  30.  
  31. Data: 
  32.  
  33. 1C 34 07 01 01 00 00 00 27 00 00 00 00 00 00 00 .4...... '....... 
  34.  
  35. 2C 34 07 01 A0 77 01 03 00 CD CD CD CD CD CD CD ,4...w.. ........ 
  36.  
  37. CD CD CD CD CD CD CD CD 00 00 00 00 0F 00 00 00 ........ ........ 


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

VisualStudio 使用Visual Leak Detector檢查內存泄漏

定位內存泄漏點

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
免费不卡在线观看av| 日本欧美在线视频| 清纯唯美日韩制服另类| 91在线直播亚洲| 国产一区二区三区日韩欧美| 国产成人精品综合久久久| 久久久www成人免费精品张筱雨| 久久亚洲春色中文字幕| 中文字幕一区二区三区电影| 亚洲精品91美女久久久久久久| 成人信息集中地欧美| 亚洲新声在线观看| 亚洲欧美一区二区激情| 九九九热精品免费视频观看网站| 91av免费观看91av精品在线| 亚洲视频综合网| 欧美日本亚洲视频| 亚洲18私人小影院| 久久噜噜噜精品国产亚洲综合| 国产精品久久久久91| 成人黄色片网站| 亚洲a区在线视频| 欧美在线视频网| 成人久久久久爱| 激情久久av一区av二区av三区| 91国内在线视频| 日韩av色在线| 中文字幕欧美国内| 中文字幕亚洲色图| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩精品在线免费观看| 国产有码一区二区| 亚洲一区二区三区在线视频| 91精品国产一区| 国产精品美女视频网站| 最近2019年手机中文字幕| 久久久91精品国产| 色狠狠av一区二区三区香蕉蜜桃| 亚洲一级黄色av| 91精品国产91久久久久久不卡| 亚洲国产一区二区三区在线观看| 国产91精品久久久久久久| 午夜精品一区二区三区视频免费看| 欧美激情xxxxx| 欧美精品激情blacked18| 亚洲第一福利网站| 91中文在线观看| 亚洲电影免费观看高清完整版在线| 九九精品视频在线观看| 欧美综合在线第二页| 亚洲精品短视频| 综合欧美国产视频二区| 国产精品手机播放| 欧美日韩亚洲网| 永久免费看mv网站入口亚洲| 欧美久久久精品| 精品视频久久久久久| 26uuu亚洲伊人春色| 26uuu另类亚洲欧美日本老年| 亚洲品质视频自拍网| 国产欧美一区二区白浆黑人| 欧美激情国内偷拍| 国产视频自拍一区| 亚洲最大福利视频网站| 国产亚洲美女精品久久久| 亚洲免费人成在线视频观看| 亚洲美女福利视频网站| 91久久久久久久久久久| 国产精品高精视频免费| 亚洲黄页网在线观看| 国产成人精品av| 日韩a**站在线观看| 伊人久久大香线蕉av一区二区| 97超级碰碰碰| 成人黄色影片在线| 亚洲a中文字幕| 国产91色在线| 欧美日韩性生活视频| 51精品国产黑色丝袜高跟鞋| 久久久成人精品视频| 亚洲精品国产精品国自产在线| 国产精品第8页| 91在线免费看网站| 成人在线免费观看视视频| 欧美日韩亚洲激情| 久久久久亚洲精品| 色妞一区二区三区| 久色乳综合思思在线视频| 国内精品视频久久| 97欧美精品一区二区三区| 中国人与牲禽动交精品| 97视频在线观看亚洲| 色综合久综合久久综合久鬼88| 97在线观看视频国产| 色偷偷88888欧美精品久久久| 亚洲午夜av电影| 91av在线国产| 亚洲精品视频网上网址在线观看| 成人网在线观看| 亚洲一区二区三区在线免费观看| 久久久久久久久久国产精品| 国产成人久久精品| 欧美精品久久久久久久| 成人精品久久av网站| 亚洲一区二区三区成人在线视频精品| 欧美黄网免费在线观看| 久久中文精品视频| 欧美性xxxx18| 91国内免费在线视频| 亚洲石原莉奈一区二区在线观看| 亚洲精品理论电影| 17婷婷久久www| 97av在线视频免费播放| 久久偷看各类女兵18女厕嘘嘘| 日韩精品日韩在线观看| 一本色道久久88亚洲综合88| 亚洲欧美制服第一页| 国产不卡av在线免费观看| 国产一区二区三区在线视频| 久久免费观看视频| 亚洲人a成www在线影院| 亚洲天堂开心观看| 久久久精品一区二区三区| 亚洲的天堂在线中文字幕| 久久99青青精品免费观看| 欧美午夜精品伦理| 国产在线视频欧美| 国产97人人超碰caoprom| 九九热精品视频在线播放| 正在播放欧美一区| 久久久国产成人精品| 91午夜理伦私人影院| 热久久99这里有精品| 亚洲精品mp4| 播播国产欧美激情| 国产视频在线观看一区二区| 色婷婷av一区二区三区在线观看| 538国产精品一区二区免费视频| 日韩视频永久免费观看| 欧美激情第99页| 亚洲白拍色综合图区| 91在线精品播放| 操人视频在线观看欧美| 亚洲国产精彩中文乱码av| 欧美极品在线播放| 国产视频久久网| 国产精品久久久久久av| 亚洲精品久久久一区二区三区| 久久久久成人精品| 国产精品草莓在线免费观看| 日韩最新中文字幕电影免费看| 在线色欧美三级视频| 日韩精品免费在线视频| 成人淫片在线看| 久久久久免费精品国产| 精品国产91乱高清在线观看| 亲子乱一区二区三区电影| 疯狂蹂躏欧美一区二区精品| 91在线精品播放| 亚洲黄色av女优在线观看| 日韩国产欧美精品在线| www.亚洲天堂| 日韩电影中文字幕| 亚洲精品720p|