UMDH 是windows debug tools 下的一款命令行工具,它的全名是User-Mode Dump Heap 这个工具会分析当前进程在堆上分配的内存,并有两种模式
1. 进程分析模式,这个模式会对进程分配的每一块内存做记录,其中包含分配的内存大小;内存分配地址;内存分配时的函数调用堆栈等。
2. 日志分析模式,该模式会比较几个不同的日志,找出内存增长的地方。
参照微软的网站和N多大牛的文章,做下小结:
1. 安装dbg_x86_6.10.3.233.msi。Gflags和UMDH都在其中。
这个环节的问题:最新的版本我在MS网站上竟然找不到,后来查了下,原来被打包在sdk中了,详见
http://blog.csdn.net/zhang957411207/article/details/8165861。没有用新版也不影响使用效果。
2. 配置系统 环境变量设置
_NT_SYMBOL_PATH SRV*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\myapplicationssymbols
使用 UMDH 的最重要的步骤之一是确保您具有正确的符号文件,此路径的第一部分指向 Microsoft 符号服务器和存放符号文件的目录,这里存放目录设置为 c:\symbols (手动创建),路径配置完成后,运行程序,系统的pdb就会自动下载到该文件夹;分号后面的路径是应用程序的PDB(符号文件)路径,编译完程序后,将应用程序pdb拷贝到该目录下。
-----------------------------------------------------------------------------------------------------------------
说明:配置了_NT_SYMBOL_PATH 后,启动vs调试程序,初次启动,速度较慢,原因是vs要去服务器下载相关系统dll的pdb文件。
网速如果不给力,慢的受不了,symbols也可以通过手动下载来解决。
手动下载Symbol的地址:
http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx#_System_Requirements
-----------------------------------------------------------------------------------------------------------------3. 启用cmd,切换到 dbg的安装目录下,如 D:\Program Files\Debugging Tools for Windows (x86)
4. 使用PageHeap配置工具,打开进程的栈捕捉标志 命令如下: gflags -i appname.exe(目标进程名称) +ust
5. 进程启动后,运行下UMDH, 命令如下: umdh -p:目标进程 ID -f:log1.txt(第一次输出文件)
目标进程的ID在cmd下使用tasklist可以看到。
让目标进程运行一段时间,观察到有明显的内存增长。
再次运行,获取新的log文件:
umdh -p:目标进程 ID -f:log2.log(第二次输出文件)
6.获取结果 运行: umdh -d -v log1.txt log2.txt > diff.txt ,在diff.txt可以找到明显的内存增长点。
要监测的进程要以debug方式运行,release获取不到比较详细的信息