使用UMDH 定位内存泄漏小结

来源:互联网 发布:服务器硬件监控软件 编辑:程序博客网 时间:2024/05/11 04:24

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获取不到比较详细的信息

    ---------------------------------


 

原创粉丝点击