內(nèi)存與句柄泄露處理技巧(1)_第1頁
內(nèi)存與句柄泄露處理技巧(1)_第2頁
內(nèi)存與句柄泄露處理技巧(1)_第3頁
內(nèi)存與句柄泄露處理技巧(1)_第4頁
內(nèi)存與句柄泄露處理技巧(1)_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、VC+ 實(shí)戰(zhàn)調(diào)試技巧前言:上節(jié)內(nèi)容回顧與本節(jié)內(nèi)容介紹主講人:陽毅超 UIPower CTO上節(jié)內(nèi)容回顧WinDbg的基本使用方法利用WinDbg生成dump與分析dump文件利用WinDbg進(jìn)行遠(yuǎn)程調(diào)試WinDbg的高級調(diào)試技巧本節(jié)內(nèi)容介紹利用BoundCheck定位內(nèi)存泄露利用GDIViewer確定GDI泄露利用VMMap分析程序內(nèi)存使用VC+ 實(shí)戰(zhàn)調(diào)試技巧第三講:內(nèi)存與句柄泄露處理技巧主講人:陽毅超 UIPower CTO第一節(jié):利用BoundCheck解決內(nèi)存泄露使用C+編碼最頭痛的問題內(nèi)存泄露,隱藏很深,難以定位位置,費(fèi)時(shí),費(fèi)力變量初始化,未初始化變量導(dǎo)致運(yùn)行偶現(xiàn)的錯誤錯誤的內(nèi)存操作,

2、“踩”了別人的內(nèi)存偶現(xiàn)崩潰BoundCheck是什么運(yùn)行時(shí)錯誤檢測工具,可以在運(yùn)行時(shí)定位各種錯誤的發(fā)生并定位錯誤位置。BoundCheck可定位錯誤的類型1、指針和泄露錯誤(內(nèi)存或資源泄露)2、內(nèi)存錯誤(內(nèi)存分配沖突,分配堆的溢出,棧的溢出)3、API調(diào)用錯誤,OLE錯誤 第一節(jié):利用BoundCheck解決內(nèi)存泄露BoundCheck的安裝VCKBase提供了試用版本的BoundCheck9.1http:/ VS2008使用步驟兩種使用方式:VS集成工具、利用ErrorDection工具 第一節(jié):利用BoundCheck解決內(nèi)存泄露內(nèi)存泄露的檢測內(nèi)存分配未釋放啟動BoundCheck,運(yùn)行程

3、序獲取分析結(jié)果1、概要信息2、泄漏信息3、其他泄漏信息4、錯誤信息5、.NET性能信息6、加載模塊信息7、記錄信息 第一節(jié):利用BoundCheck解決內(nèi)存泄露內(nèi)存泄露的檢測1、泄漏次數(shù)2、泄漏大小3、泄漏位置第一節(jié):利用BoundCheck解決內(nèi)存泄露系統(tǒng)資源泄露的檢測系統(tǒng)資源如文件句柄資源,信號句柄資源、GDI資源1、數(shù)量2、釋放方法3、分派位置 第一節(jié):利用BoundCheck解決內(nèi)存泄露堆溢出的檢測訪問內(nèi)存超過之前分配堆的大小1、數(shù)量2、位置 第二節(jié):利用GDIView而定位GDI泄露問題GDI泄露所導(dǎo)致的問題系統(tǒng)為每一個(gè)進(jìn)程提供有限的GDI資源數(shù)量,為9999個(gè)由于泄漏,超出使用限制

4、之后將出現(xiàn)無法申請到資源的情況,其現(xiàn)象為界面黑掉,后者無法刷新的問題,但程序有可能不會崩潰。判斷GDI泄漏的方法查看資源管理器的GDI對象數(shù)量資源管理器查看GDI的問題1、反應(yīng)有時(shí)不夠及時(shí)和準(zhǔn)確2、不知道GDI的類型3、無法得到程序進(jìn)行操作的GDI增量 第二節(jié):利用GDIView而定位GDI泄露問題常用的GDI對象類型Pen(畫筆) - CreatePen - DeleteObjectBrush(畫刷) - CreateBrush - DeleteObjectBitmap(位圖)- CreatecompatibleBitmap CreateDIBitmap CreateBitmap Creat

5、eBimtapIndirect - DeleteObjectFont(字體)- CreateFont - DeleteObjectPalette(調(diào)色板)- CreatePalette - DeleteObjectRegion(區(qū)域) - CreateRectRegion - DeleteObjectDC(設(shè)備內(nèi)容) - GetDC ReleaseDC CreateCompatibleDC CreateDC DestroyDC第二節(jié):利用GDIView而定位GDI泄露問題GDIView所提供的功能1、可查看進(jìn)程GDI分配數(shù)量2、可查看進(jìn)程GDI對象種類3、可查看進(jìn)程GDI對象的分配地址與分配時(shí)

6、間4、可增量查看GDI變化利用GDIView增量確定GDI泄漏1、開啟增量查看規(guī)則2、對檢測程序進(jìn)行操作3、觀察GDI變化增量處理GDI泄漏的方法1、弄清楚所有GDI資源的分配和釋放方法2、利用BoundCheck3、屏蔽代碼確定和縮小泄漏范圍第三節(jié):利用VMMap分析內(nèi)存使用與分配規(guī)則內(nèi)存種類堆(Heap)內(nèi)存,棧(Stack)內(nèi)存堆內(nèi)存以增量的方式進(jìn)行分派堆數(shù)據(jù)塊。64K 256K 1024K 2048K 4M 8M 16M程序使用的內(nèi)存由物理內(nèi)存和虛擬內(nèi)存構(gòu)成,win7對應(yīng)的是任務(wù)管理器的提交大小,即為物理內(nèi)存和虛擬內(nèi)存之和。Image(鏡像)內(nèi)存加載到進(jìn)程中的dll,exe程序所占用的

7、內(nèi)存Private(私有)內(nèi)存利用VirualAlloc分配的內(nèi)存,無法被其他程序所共享Shareable(共享)內(nèi)存可被其他進(jìn)程共享的內(nèi)存Mapped Files(鏡像文件)內(nèi)存可共享的表示文件或者磁盤的內(nèi)存Manager Heap(托管堆)內(nèi)存被.net GC分配出來的私有內(nèi)存System(系統(tǒng))內(nèi)存被系統(tǒng)核心使用物理內(nèi)存 第三節(jié):利用VMMap分析內(nèi)存使用與分配規(guī)則確定內(nèi)存的方式利用任務(wù)管理器查看內(nèi)存使用,存在問題1、不能確定堆、棧和其他種類內(nèi)存的使用2、無法確定堆數(shù)據(jù)塊的實(shí)際分配情況VMMap的特性VMMap是一個(gè)進(jìn)程虛擬內(nèi)存物理內(nèi)存的分析工具1、可確定內(nèi)存的種類和分配大小2、可確定堆實(shí)際分配的地址及大小VMMap的使用1、選擇進(jìn)程2、查看對用類型內(nèi)存的分配Commit提交內(nèi)存大小(數(shù)據(jù)與代碼)Private Byt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論