使用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...