青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Kisser Leon

這個(gè)kisser不太冷
posts - 100, comments - 102, trackbacks - 0, articles - 0

摘要
本文分析了Windows環(huán)境使用MFC調(diào)試內(nèi)存泄露的技術(shù),介紹了在Windows環(huán)境下用VC++查找,定位和消除內(nèi)存泄露的方法技巧。

關(guān)鍵詞:VC++;CRT 調(diào)試堆函數(shù);試探法。

編譯環(huán)境
VC++6.0
技術(shù)原理
檢測(cè)內(nèi)存泄漏的主要工具是調(diào)試器和 CRT 調(diào)試堆函數(shù)。若要啟用調(diào)試堆函數(shù),請(qǐng)?jiān)诔绦蛑邪ㄒ韵抡Z(yǔ)句:

#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
注意 #include 語(yǔ)句必須采用上文所示順序。如果更改了順序,所使用的函數(shù)可能無(wú)法正確工作。

通過(guò)包括 crtdbg.h,將 malloc 和 free 函數(shù)映射到其“Debug”版本_malloc_dbg 和_free_dbg,這些函數(shù)將跟蹤內(nèi)存分配和釋放。此映射只在調(diào)試版本(在其中定義了 _DEBUG)中發(fā)生。發(fā)布版本使用普通的 malloc 和 free 函數(shù)。

#define 語(yǔ)句將 CRT 堆函數(shù)的基版本映射到對(duì)應(yīng)的“Debug”版本。并非絕對(duì)需要該語(yǔ)句,但如果沒(méi)有該語(yǔ)句,內(nèi)存泄漏轉(zhuǎn)儲(chǔ)包含的有用信息將較少。

在添加了上面所示語(yǔ)句之后,可以通過(guò)在程序中包括以下語(yǔ)句來(lái)轉(zhuǎn)儲(chǔ)內(nèi)存泄漏信息:
_CrtDumpMemoryLeaks();
當(dāng)在調(diào)試器下運(yùn)行程序時(shí),_CrtDumpMemoryLeaks 將在“輸出”窗口中顯示內(nèi)存泄漏信息。內(nèi)存泄漏信息如下所示:
Detected memory leaks!
Dumping objects ->
C:PROGRAM FILESVISUAL STUDIOMyProjectsleaktestleaktest.cpp(20) : {18} normal block at 0x00780E80, 64 bytes long.
Data: <        > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete. 
如果不使用 #define _CRTDBG_MAP_ALLOC 語(yǔ)句,內(nèi)存泄漏轉(zhuǎn)儲(chǔ)如下所示:
Detected memory leaks!
Dumping objects ->
{18} normal block at 0x00780E80, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete. 

未定義 _CRTDBG_MAP_ALLOC 時(shí),所顯示的會(huì)是:

內(nèi)存分配編號(hào)(在大括號(hào)內(nèi))。
塊類型(普通、客戶端或 CRT)。
十六進(jìn)制形式的內(nèi)存位置。
以字節(jié)為單位的塊大小。
前 16 字節(jié)的內(nèi)容(亦為十六進(jìn)制)。
定義了 _CRTDBG_MAP_ALLOC 時(shí),還會(huì)顯示在其中分配泄漏的內(nèi)存的文件。文件名后括號(hào)中的數(shù)字(本示例中為 20)是該文件內(nèi)的行號(hào)。

轉(zhuǎn)到源文件中分配內(nèi)存的行

在"輸出"窗口中雙擊包含文件名和行號(hào)的行。
-或-

在"輸出"窗口中選擇包含文件名和行號(hào)的行,然后按 F4 鍵。

_CrtSetDbgFlag 

如果程序總在同一位置退出,則調(diào)用 _CrtDumpMemoryLeaks 足夠方便,但如果程序可以從多個(gè)位置退出該怎么辦呢?不要在每個(gè)可能的出口放置一個(gè)對(duì) _CrtDumpMemoryLeaks 的調(diào)用,可以在程序開(kāi)始包括以下調(diào)用:

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); 

該語(yǔ)句在程序退出時(shí)自動(dòng)調(diào)用 _CrtDumpMemoryLeaks。必須同時(shí)設(shè)置 _CRTDBG_ALLOC_MEM_DF 和 _CRTDBG_LEAK_CHECK_DF 兩個(gè)位域,如上所示。

說(shuō)明
在VC++6.0的環(huán)境下,不再需要額外的添加

#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h> 

只需要按F5,在調(diào)試狀態(tài)下運(yùn)行,程序退出后在"輸出窗口"可以看到有無(wú)內(nèi)存泄露。如果出現(xiàn)

Detected memory leaks!
Dumping objects -> 

就有內(nèi)存泄露。

確定內(nèi)存泄露的地方
根據(jù)內(nèi)存泄露的報(bào)告,有兩種消除的方法:

第一種比較簡(jiǎn)單,就是已經(jīng)把內(nèi)存泄露映射到源文件的,可以直接在"輸出"窗口中雙擊包含文件名和行號(hào)的行。例如

Detected memory leaks!
Dumping objects ->
C:PROGRAM FILESVISUAL STUDIOMyProjectsleaktestleaktest.cpp(20) : {18} normal block at 0x00780E80, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
C:PROGRAM FILESVISUAL STUDIOMyProjectsleaktestleaktest.cpp(20)

就是源文件名稱和行號(hào)。

第二種比較麻煩,就是不能映射到源文件的,只有內(nèi)存分配塊號(hào)。

Detected memory leaks!
Dumping objects ->
{18} normal block at 0x00780E80, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete. 

  這種情況我采用一種"試探法"。由于內(nèi)存分配的塊號(hào)不是固定不變的,而是每次運(yùn)行都是變化的,所以跟蹤起來(lái)很麻煩。但是我發(fā)現(xiàn)雖然內(nèi)存分配的塊號(hào)是變化的,但是變化的塊號(hào)卻總是那幾個(gè),也就是說(shuō)多運(yùn)行幾次,內(nèi)存分配的塊號(hào)很可能會(huì)重復(fù)。因此這就是"試探法"的基礎(chǔ)。

  1. 先在調(diào)試狀態(tài)下運(yùn)行幾次程序,觀察內(nèi)存分配的塊號(hào)是哪幾個(gè)值;
  2. 選擇出現(xiàn)次數(shù)最多的塊號(hào)來(lái)設(shè)斷點(diǎn),在代碼中設(shè)置內(nèi)存分配斷點(diǎn): 添加如下一行(對(duì)于第 18 個(gè)內(nèi)存分配):
    _crtBreakAlloc = 18; 
    或者,可以使用具有同樣效果的 _CrtSetBreakAlloc 函數(shù):
    _CrtSetBreakAlloc(18); 

     

  3. 在調(diào)試狀態(tài)下運(yùn)行序,在斷點(diǎn)停下時(shí),打開(kāi)"調(diào)用堆棧"窗口,找到對(duì)應(yīng)的源代碼處;
  4. 退出程序,觀察"輸出窗口"的內(nèi)存泄露報(bào)告,看實(shí)際內(nèi)存分配的塊號(hào)是不是和預(yù)設(shè)值相同,如果相同,就找到了;如果不同,就重復(fù)步驟3,直到相同。
  5. 最后就是根據(jù)具體情況,在適當(dāng)?shù)奈恢冕尫潘峙涞膬?nèi)存。
Google

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美丰满高潮xxxx喷水动漫| 亚洲电影中文字幕| 国产综合av| 久久久亚洲国产天美传媒修理工| 久久综合九色综合欧美就去吻| 1024日韩| 欧美日韩在线亚洲一区蜜芽| 亚洲欧洲av一区二区三区久久| 久久深夜福利| 洋洋av久久久久久久一区| 欧美天天影院| 久久久免费精品视频| 91久久精品日日躁夜夜躁欧美 | 国产精品一区二区三区四区五区 | 欧美一级二级三级蜜桃| 蜜月aⅴ免费一区二区三区 | 亚洲欧美日韩在线| 美女在线一区二区| 亚洲视频在线二区| 精品成人a区在线观看| 欧美日韩国产成人在线免费| 亚洲综合色婷婷| 亚洲国产精品成人一区二区| 亚洲欧美激情四射在线日| 黄色国产精品一区二区三区| 欧美日韩国产精品一区| 久久精品卡一| 在线亚洲观看| 亚洲国产成人在线| 久久精品国产久精国产一老狼| 亚洲精品欧美精品| 国内精品美女av在线播放| 欧美日韩中文字幕| 久久这里有精品视频| 亚洲欧美成人一区二区在线电影| 亚洲第一级黄色片| 久久午夜激情| 欧美一区二区日韩| 亚洲香蕉在线观看| 亚洲精品免费电影| 激情综合激情| 国产亚洲午夜高清国产拍精品| 欧美日韩国产高清| 久久精品夜色噜噜亚洲a∨ | 亚洲电影第1页| 久久久久久久91| 午夜精品视频在线观看一区二区| 亚洲精选视频免费看| 一区二区视频在线观看| 国产欧美精品在线| 国产精品毛片在线| 国产精品a久久久久久| 欧美激情精品久久久久久黑人| 久久久久久久波多野高潮日日| 亚洲欧美中文日韩v在线观看| 99re这里只有精品6| 亚洲国产三级在线| 欧美国产日韩一区| 蜜桃av一区| 美国成人直播| 久久免费少妇高潮久久精品99| 欧美一区二区三区免费观看视频| 亚洲一区二区三区激情| 在线一区观看| 一区二区三区导航| 一本一本大道香蕉久在线精品| 亚洲乱码国产乱码精品精98午夜| 亚洲成色精品| 亚洲第一在线综合网站| 伊人婷婷欧美激情| 亚洲国产精品v| 亚洲人成免费| 日韩亚洲成人av在线| 日韩视频在线免费观看| 亚洲精品在线观看免费| 亚洲精品午夜| 在线一区观看| 亚洲欧美国产另类| 欧美一区二区视频在线观看2020| 亚洲欧美在线aaa| 欧美一区二区女人| 久久精品噜噜噜成人av农村| 久久免费高清视频| 欧美3dxxxxhd| 亚洲欧洲精品一区| 一区二区三区福利| 亚洲欧美日韩精品久久久久| 欧美与欧洲交xxxx免费观看| 久久男人资源视频| 欧美电影电视剧在线观看| 欧美久久婷婷综合色| 欧美性一二三区| 国产亚洲激情视频在线| 伊人久久综合| 一级日韩一区在线观看| 欧美一级淫片播放口| 久久久久久自在自线| 欧美成人a∨高清免费观看| 亚洲欧洲一区二区在线观看 | 国产在线欧美| 亚洲人成亚洲人成在线观看| 亚洲天堂av图片| 久久精品亚洲国产奇米99| 欧美成人免费一级人片100| 亚洲日本成人| 性一交一乱一区二区洋洋av| 免费在线观看一区二区| 国产精品高清在线| 在线精品国产成人综合| 这里只有精品视频| 久久夜色精品国产噜噜av| 亚洲欧洲偷拍精品| 性刺激综合网| 欧美日韩精品伦理作品在线免费观看| 国产精品天天摸av网| 亚洲国产精品久久久久秋霞不卡| 亚洲影视在线| 欧美成人精品h版在线观看| 亚洲一区二区三区国产| 久久一区二区三区四区| 国产精品美女主播| 亚洲高清免费在线| 欧美88av| 国产日韩亚洲欧美综合| 亚洲高清视频中文字幕| 亚洲天堂免费观看| 欧美高清视频一区二区三区在线观看 | 亚洲高清久久| 欧美一区二区三区四区在线 | 亚洲免费在线精品一区| 欧美性猛片xxxx免费看久爱| 亚洲午夜国产成人av电影男同| 亚洲区免费影片| 欧美日韩精品高清| 亚洲一区免费观看| 中日韩视频在线观看| 国产精品社区| 久久精品国产综合精品| 久久精品国产2020观看福利| 精品成人a区在线观看| 欧美国产日韩免费| 欧美国产精品专区| 在线亚洲电影| 亚洲在线视频| 狠狠干成人综合网| 欧美xx视频| 欧美精品在线免费播放| 亚洲网站视频福利| 亚洲欧美一区二区三区在线| 国产婷婷色一区二区三区在线| 久久久亚洲精品一区二区三区| 久久久久久久一区| 亚洲免费成人av| 亚洲午夜久久久久久尤物| 国产日韩视频| 欧美韩日视频| 欧美三区不卡| 久久综合给合久久狠狠色| 欧美大片免费看| 亚洲欧美成人网| 久久久久国产精品午夜一区| 亚洲免费成人av| 亚洲一区二区三区成人在线视频精品| 国产一区二区三区久久久久久久久| 麻豆国产精品va在线观看不卡| 欧美成人dvd在线视频| 亚洲欧美日韩国产精品| 久久精品亚洲热| 中文精品视频一区二区在线观看| 亚洲免费视频观看| 91久久亚洲| 亚洲尤物精选| 亚洲精品社区| 午夜精品久久久久久久蜜桃app | 日韩天天综合| 国产亚洲精品久久飘花| 亚洲国产成人精品女人久久久| 国产精品theporn88| 免费影视亚洲| 国产老肥熟一区二区三区| 亚洲第一主播视频| 国产亚洲网站| 夜夜夜久久久| 亚洲高清色综合| 亚洲曰本av电影| 亚洲美女啪啪| 久久久久久久激情视频| 亚洲欧美日韩一区二区在线| 美女精品自拍一二三四| 欧美在线免费播放| 欧美日韩爆操| 欧美成人精品| 国产一区二区中文| 国产精品99久久久久久久久久久久| 在线观看日韩专区| 欧美一级一区| 亚洲欧美日韩一区在线观看| 欧美福利一区| 欧美 日韩 国产 一区| 国产精品视频一二三|