UMDH(用户模式转储堆user-mode dump heap)是一个用于分析进程windows堆分配的工具。
可以用于分析进程的内存泄露问题。
使用 UMDH 请参见内存泄漏前,请执行以下步骤:
1、安装 UMDH 实用程序。
2、设置系统 PATH 环境变量包含 UMDH 的安装的文件夹。
3、请将 _NT_SYMBOL_PATH 环境变量设置为 Microsoft 符号服务器的路径,以便 UMDH 可以找到调试符号文件。按以下设置,会自动下载操作系统对应的符号文件
set _NT_SYMBOL_PATH=
"SRV*c:\symbols*http://msdl.microsoft.com/download/symbols;d:\myapp\bin"
d:\myapp\bin为PDB所在目录
若要生成堆分配的转储文件,必须使用 Gflags.exe 实用程序,它也是包含在 Windows 调试工具产品,让操作系统知道您想要跟踪分配的内核。
gflags -i notepad.exe +ust
完成后,可以利用UMDH工作生成转储文件
Umdh -p:PID -f:"d:\old.log"
Umdh -p:PID -f:"d:\new.log"
umdh.exe "D:\old.log" "D:\new.log" -f:"D:\result.log"
打开D:\result.log 文件,可以看到类似如
// + BYTES_DELTA (NEW_BYTES - OLD_BYTES) NEW_COUNT allocs BackTrace TRACEID
// + COUNT_DELTA (NEW_COUNT - OLD_COUNT) BackTrace TRACEID allocations
// ... 调用堆栈 ...
// where:
//
// BYTES_DELTA - 前后两个文件间增加的字节
// NEW_BYTES - 后一个文件中字节数
// OLD_BYTES - 前一个文件中字节数
// COUNT_DELTA - 前后两个文件间增加的分配次数
// NEW_COUNT - 后一个文件中分配的次数
// OLD_COUNT - 前一个文件中的分配次数
// TRACEID - 栈标记,可以用于在UMDH 文件中查找分配定位
http://support.microsoft.com/kb/268343