使用UMDH查詢記憶體洩漏

2021-04-14 02:08:06 字數 1812 閱讀 8843

使用umdh

1.

設定_nt_symbol_path環境變數,例如用命令列:set _nt_symbol_path=c:/windows/symbols。把你自己程式的symbol files (.pdb) 檔案放在跟你執行檔案同一目錄,或者加到_nt_symbol_path環境變數裡面。 2.

設定gflags,通過命令gflags -i notepad.exe +ust

gflags也是

debugging tools for windows裡面乙個工具程式。也可以敲入gflags命令,然後通過介面配置,進入介面後選擇image file, 在image欄寫入執行檔案的名字,不需要全路徑,例如只要輸入notepad.exe, 然後按 tab鍵,選中create user mode stack trace database選項,確認。

轉儲以捕獲

1.

獲得要分析的程式的程序號,比如你的程序號是

1234,在命令列輸入umdh -p:1234 -f: 1234old.log,得到1234old.log檔案。

2.繼續執行你的程式,或者說進行你懷疑會有記憶體洩漏的操作。 3.

間隔一段時間後,輸入命令umdh -p:1234 -f: 1234new.log。 4.

然後執行umdh-d 1234old.log 1234new.log > cmp1234.txt

分析比較結果

1.cmp1234.txt就是兩個時刻的heap stack trace的差別,

它類似於以下資訊:

+ 5320 ( f110 - 9df0) 3a allocs backtrace00053 

total increase == 5320

2.接下來就是查詢對應的backtrace,

例如上面的意思是說在

backtrace00053處記憶體增加了5320個位元組,在backtrace00053

你將能找到記憶體洩露處對應的

callstack。

3.接下來

看一下backtrace00053究竟有什麼東西,找到第二個日誌檔案,在這裡就是1234new.log,搜尋backtrace00053, 如果你的symbol file path配置正確的話,在backtrace00053你會發現有類似如下資訊:

00005320 bytes in 0x14 allocations (@ 0x00000428) by: backtrace00053

ntdll!rtldebugallocateheap+0x000000fd

ntdll!rtlallocateheapslowly+0x0000005a

ntdll!rtlallocateheap+0x00000808

kernel32!baseprocessstart+0x0000003d

上面就是分配那塊記憶體的stack trace資訊,在這裡我們看到實在

函式裡面有個

new操作。以

上資訊說明,在兩個日誌時間間隔裡面,

分配了新的記憶體,但是還沒有釋放。

x

UMDH檢測記憶體洩漏,配置

一 配置global flags 二 設定系統環境變數 1 設定系統 path 環境變數包含 umdh 的安裝的資料夾。2 新新增系統環境變數 nt symbol path,nt symbol path的值設定為 srv c syssymbols 其中為目標測試軟體pdb所在目錄 ps 有時在使用u...

umdh查詢記憶體洩露

配置環境變數 windbg目錄 cd c program files x86 windows kits 8.0 debuggers x86 啟用池標記 gflags.exe i partsmodelselection.exe ust 開啟應用程式 建立快照1 umdh.exe p 9432 f u1...

使用Valgrind查詢記憶體洩漏

在網上找了乙個c語言版本的base64 編譯通過,不過執行的時候報了corrupted size vs.prev size錯誤 網上查了一下資料,大致說是記憶體洩漏。但是怎麼分析哪兒洩漏,為什麼洩漏?在網上找到一款神器valgrind 專用於分析記憶體洩漏等各種疑難雜症。1 安裝 to instal...