Umdh 是 Debugging Tools for Windows 裏面的一個工具, 可以從下面鏈接下載http://www.microsoft.com/whdc/devtools/debugging/default.mspx. UMDH主要通過分析比較進程的Heap Stack trace信息來發現內存泄露的。
使用 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
MyApp!_heap_alloc_base+0x00000069
MyApp!_heap_alloc_dbg+0x000001A2
MyApp!_nh_malloc_dbg+0x00000023
MyApp!_nh_malloc+0x00000016
MyApp!operator new+0x0000000E
MyApp!LeakyFunc+0x0000001E
MyApp!main+0x0000002C
MyApp!mainCRTStartup+0x000000FC
KERNEL32!BaseProcessStart+0x0000003D
上面就是分配那塊內存的Stack trace信息,在這裏我們看到實在MyApp!LeakyFunc函數裏面有個new操作。以上信息說明,在兩個日誌時間間隔裏面,MyApp!LeakyFunc分配了新的內存,但是還沒有釋放。
下面鏈接是有關UMDH的視頻:http://wm.microsoft.com/ms/mcsp/servicedesk/080702.wmv.
使用Umdh對付內存泄漏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
python腳本簡化jar操作命令
神牛003
2019-02-23 17:41:06
Python與家國天下
豌豆花下貓
2019-02-24 22:22:40
windows下配置php
jason1982
2019-02-24 12:57:09
windows2003+CA+S3300+802.1X
qyh282110204
2019-02-23 14:05:36
win7如何以管理員身份登錄
wwtwwttc
2019-02-23 14:05:22
windows系統常用快捷鍵
LQ_112
2019-02-23 13:47:18
Antigen for exchange 部署+評測
coinking
2019-02-23 13:36:48
windows2003前言
starruning
2019-02-23 13:33:37
windows server 2008 登錄中 取消CTRL+ALT+DEL
菜鳥小苗
2019-02-23 13:31:29
windows server 2008中實現顆粒化的密碼策略
菜鳥小苗
2019-02-23 13:31:29
HTML Images - TechGeekBuzz
cloudytechi147
2021-10-16 15:58:01
oracle 啓動歸檔模式
huchazsu
2019-02-23 14:01:14
mysql基本命令
samplelife
2019-02-23 13:57:36
解決不能mysqldump備份權限不夠的問題
guokaikaikai
2019-02-23 13:32:01