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

Kisser Leon

這個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ù)原理
檢測內(nèi)存泄漏的主要工具是調(diào)試器和 CRT 調(diào)試堆函數(shù)。若要啟用調(diào)試堆函數(shù),請在程序中包括以下語句:

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

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

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

在添加了上面所示語句之后,可以通過在程序中包括以下語句來轉(zhuǎn)儲內(nèi)存泄漏信息:
_CrtDumpMemoryLeaks();
當(dāng)在調(diào)試器下運行程序時,_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 語句,內(nèi)存泄漏轉(zhuǎn)儲如下所示:
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 時,所顯示的會是:

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

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

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

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

_CrtSetDbgFlag 

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

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); 

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

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

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

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

Detected memory leaks!
Dumping objects -> 

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

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

第一種比較簡單,就是已經(jīng)把內(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.
C:PROGRAM FILESVISUAL STUDIOMyProjectsleaktestleaktest.cpp(20)

就是源文件名稱和行號。

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

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)存分配的塊號不是固定不變的,而是每次運行都是變化的,所以跟蹤起來很麻煩。但是我發(fā)現(xiàn)雖然內(nèi)存分配的塊號是變化的,但是變化的塊號卻總是那幾個,也就是說多運行幾次,內(nèi)存分配的塊號很可能會重復(fù)。因此這就是"試探法"的基礎(chǔ)。

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

     

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

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   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>
            欧美日韩亚洲一区二| 久久久亚洲高清| 欧美午夜精品久久久久久超碰| 久久国产主播精品| 小辣椒精品导航| 午夜精品视频在线观看| 午夜精品www| 久久精品官网| 久久亚洲图片| 欧美黄色一区| 欧美午夜精品久久久久久孕妇 | 亚洲二区在线视频| 在线日韩电影| 中国女人久久久| 亚洲欧美亚洲| 狂野欧美一区| 亚洲激情成人在线| 欧美黄色小视频| 一本色道久久综合一区| 欧美在线网站| 欧美片在线播放| 国产精品视频yy9099| 激情小说亚洲一区| 99国内精品久久| 性欧美超级视频| 欧美大片在线观看一区| 一本大道av伊人久久综合| 欧美一区激情视频在线观看| 美女国产精品| 国产精品免费区二区三区观看| 黑人一区二区三区四区五区| 99综合电影在线视频| 久久精品国产清自在天天线 | 午夜精品久久久| 老司机凹凸av亚洲导航| 亚洲每日在线| 久久手机免费观看| 欧美日韩在线精品一区二区三区| 久久国产夜色精品鲁鲁99| 伊人激情综合| 亚洲欧美激情视频| 久久精品中文字幕一区| 日韩视频免费观看高清完整版| 欧美在线视频观看| 国产精品成人午夜| 亚洲蜜桃精久久久久久久| 性色av一区二区三区在线观看| 欧美不卡视频一区| 欧美亚洲网站| 国产精品户外野外| 这里只有精品视频在线| 久久综合狠狠综合久久激情| 亚洲精品欧美在线| 免费在线一区二区| 国产专区欧美专区| 欧美制服丝袜第一页| 亚洲免费精彩视频| 欧美日韩123| 亚洲免费播放| 亚洲乱码日产精品bd| 欧美成人第一页| 伊人久久噜噜噜躁狠狠躁| 久久国产精品免费一区| 亚洲最新视频在线| 免费亚洲电影| 99视频超级精品| 亚洲人成在线观看| 欧美另类在线观看| 亚洲一区二区视频| 亚洲一区二区三区涩| 国产精品卡一卡二卡三| 亚洲免费在线精品一区| 亚洲一区二区三区涩| 国产日韩精品一区二区浪潮av| 欧美一区二区三区在| 午夜精品久久久久久| 国产日韩欧美中文在线播放| 久久久不卡网国产精品一区| 久久精品国产99| 亚洲国产高清aⅴ视频| 亚洲国产精品成人久久综合一区| 欧美日本亚洲视频| 午夜精品视频在线观看一区二区 | 亚洲韩国一区二区三区| 欧美激情一区二区三区在线 | 樱桃成人精品视频在线播放| 蜜臀99久久精品久久久久久软件| 久久亚洲风情| 宅男66日本亚洲欧美视频| 亚洲在线观看免费| 在线观看欧美视频| 亚洲美女在线一区| 国产欧美精品xxxx另类| 国产精品日韩欧美一区| 久久久久久久久综合| 伊人久久男人天堂| 亚洲国产综合在线看不卡| 欧美成人免费网站| 欧美风情在线| 亚洲一区二区四区| 久久国产精品黑丝| 亚洲国产免费| aa成人免费视频| 国产主播喷水一区二区| 亚洲精品日韩激情在线电影| 国产精品欧美久久久久无广告| 久久精品国产91精品亚洲| 欧美成人精品不卡视频在线观看| 亚洲视频专区在线| 欧美一区二区在线免费播放| 亚洲精品色婷婷福利天堂| 亚洲视频免费在线观看| 欧美午夜精品电影| 久久久99爱| 欧美日本免费一区二区三区| 久久精选视频| 亚洲乱码精品一二三四区日韩在线 | 最新日韩在线视频| 午夜国产精品影院在线观看| 亚洲国内精品在线| 亚洲欧美综合精品久久成人| 99这里只有精品| 蜜臀久久久99精品久久久久久 | 狠狠干综合网| 国产精品亚洲欧美| 欧美激情片在线观看| 国产精品美女主播| 亚洲国产精品久久久久秋霞蜜臀 | 99riav1国产精品视频| 午夜一区不卡| 久久久噜噜噜久久人人看| 中文在线一区| 久久综合中文色婷婷| 欧美一区二区| 欧美激情综合五月色丁香| 久久久久亚洲综合| 国产欧美日韩视频| 日韩午夜电影av| 你懂的国产精品| 黄色小说综合网站| 性久久久久久久| 欧美资源在线| 国产精品爽爽ⅴa在线观看| 欧美高清不卡在线| 雨宫琴音一区二区在线| 亚洲欧美日本视频在线观看| 久久综合色综合88| 在线观看亚洲视频啊啊啊啊| 亚洲视频www| 亚洲欧美日韩精品一区二区| 欧美视频福利| 一本久道久久综合中文字幕| 在线视频你懂得一区二区三区| 欧美日韩免费在线视频| 一本久道久久综合狠狠爱| 亚洲小视频在线观看| 国产精品嫩草99av在线| 久久国产精品久久久久久电车 | 亚洲欧美国产精品va在线观看| 欧美视频在线一区| 午夜精品久久久久久久| 麻豆精品一区二区av白丝在线| 亚洲第一精品电影| 欧美大片一区二区| 夜夜嗨av色综合久久久综合网| 亚洲中字在线| 韩日欧美一区二区| 欧美激情一区二区三区在线视频| 一区二区三区日韩在线观看| 久久福利精品| 亚洲精品综合精品自拍| 欧美体内谢she精2性欧美| 亚洲在线黄色| 亚洲电影免费观看高清完整版| 亚洲老司机av| 国产一区二区看久久| 老鸭窝亚洲一区二区三区| 91久久精品日日躁夜夜躁欧美| 亚洲午夜高清视频| 狠狠爱www人成狠狠爱综合网| 欧美电影免费观看大全| 中文日韩电影网站| 欧美黑人在线观看| 一区二区欧美国产| 国产欧美精品日韩| 欧美男人的天堂| 久久婷婷麻豆| 亚洲天天影视| 国产精品第13页| 久久在线播放| 一本久道久久综合中文字幕| 免费看成人av| 欧美在线国产精品| 一区二区高清视频在线观看| 国内精品久久久久久久果冻传媒| 欧美日韩成人综合在线一区二区 | 欧美精品18videos性欧美| 亚洲视频大全| 亚洲精品中文字| 噜噜噜噜噜久久久久久91|