乙個GDI資源洩漏檢測程式

2021-05-22 14:01:29 字數 704 閱讀 8838

程式的功能是找到所有的gdi的資源洩漏並定位建立這些洩漏資源的呼叫棧,如果有可用除錯符,可以以modulename!functionname的形式列出呼叫棧,雙擊呼叫棧可以定位到建立這些洩漏資源的源**。工作原理:

以除錯方式啟動待檢測程式,通過在合適的時機在待檢測程式建立遠端執行緒的方式注入乙個攔截gdi物件建立和刪除的dll,該dll在dllmain中攔截所有已載入和未載入的dll對gdi物件建立和刪除的呼叫。每個攔截建立gdi物件的函式做的工作都是記錄下成功建立的gdi物件控制代碼和當時的呼叫棧,每個攔截刪除gdi物件的函式做的工作都是刪除成功刪除gdi物件對應的記錄。在使用者退出待檢測程式後,把仍然存在的gdi建立記錄序列化到與檢測程式共享的記憶體對映檔案中,這樣檢測程式就可以列出洩漏清單及當時建立時的呼叫棧。

主要技術:

1.寫乙個簡單偵錯程式;(見msdn偵錯程式api)

2.注入dll到指定程序;(見《windows核心程式設計》第22章)

3.攔截api呼叫;(見《windows圖形程式設計》第1章)

4.棧跟蹤;(見msdn stackwalk64 api)

5.從位址到除錯符;(見msdn dbghelp functions)

已經成功完成前兩步,應該說技術上沒有任何問題了。

C C 程式記憶體洩漏檢測

c c 程式記憶體洩漏檢測 摺疊 1.包含標頭檔案和定義 define crtdbg map alloc include include 如果定義了 crtdbg map alloc,列印出來的是檔名和行數等更加直觀的資訊。2.方法一 在程式入口寫幾個語句 int tmpflag crtsetdbg...

C程式記憶體洩漏檢測工具

第一步 包含以下標頭檔案 define crtdbg map alloc include include 第二步 接管 new 操作符 ifdef debug ifndef dbg new define dbg new new normal block file,line define new db...

關於記憶體洩漏檢測的一些方法

define crtdbg map alloc 顯示記憶體塊型別和記憶體塊分配編號 include 在輸出視窗檢視記憶體洩漏資訊,在程式結束前加入 crtdumpmemoryleaks 退出程式位置固定時 或者 crtsetdbgflag crtdbg alloc mem df crtdbg lea...