激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - VisualStudio 使用Visual Leak Detector檢查內存泄漏

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

2021-03-01 15:25C++教程網 C/C++

這篇文章主要介紹了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 <vld.h>,但是這個頭文件在哪里引入比較好?如果是普通的一個VC++工程在哪里引入都無所謂,但是Cocos2d-x的工程就不同了,我們需要考慮跨平臺,#include <vld.h>代碼不宜添加到Classes目錄下的h或cpp文件中,這個目錄下的文件是要在其它平臺編譯運行的,而#include <vld.h>只是在Windrows平臺才有效。我們可以在Win32目錄(見圖)下的main.cpp或main.h文件引入頭文件。這些文件是與Win32平臺有關的,不同平臺移植的時候不需要。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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();
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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會輸出很多日志信息,信息如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
---------- 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表示一個內存泄漏點,在眾多Block如果能夠找到關于我們自己類的日志信息呢?我們可以查找關鍵字“helloworldscene.cpp”,這就可以定位到HelloWorld場景中的內存泄漏的Block了,我們找到如下日志信息:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
---------- 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   ........ ........

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

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

定位內存泄漏點

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

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

延伸 · 閱讀

精彩推薦
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
主站蜘蛛池模板: 国产精选电影免费在线观看网站 | 黄色片在线观看网站 | 欧美成人高清视频 | 中文字幕电影免费播放 | 中文字幕视频在线播放 | 男女羞羞视频在线观看免费 | 国产欧美在线一区二区三区 | 国产精品刺激对白麻豆99 | 日韩在线激情 | 男女无遮挡羞羞视频 | 你下面好大好硬好想要 | 精品久久久久久久久久久久包黑料 | 国产激爽大片在线播放 | 欧美大屁股精品毛片视频 | 久久久久av电影 | 国产一区二区三区在线视频 | 激情视频免费看 | 国产亚洲美女精品久久久2020 | av电影在线网站 | 美女在线视频一区二区 | 欧美日韩中文字幕在线视频 | 国产亚洲精品综合一区91555 | 在线天堂资源 | 国产成人精品视频在线 | 黄www片 | 久久久久国产成人免费精品免费 | 看片一区二区三区 | 国产免费一区二区三区最新不卡 | 日韩大片在线永久观看视频网站免费 | 免费视频a| 国内精品久久久久久2021浪潮 | 中文字幕精品亚洲 | 中国av中文字幕 | 国产婷婷一区二区三区 | 性片免费看 | 国产精品99久久久久久久 | 一级毛片在线观看免费 | 成人三级视频网站 | 中文字幕国产一区 | 一区二区久久精品66国产精品 | 成人黄色免费网址 |