如何有效地查找内存泄露(有效、轻量级的umdh.exe)

来源:互联网 发布:电脑软件乱码怎么办 编辑:程序博客网 时间:2024/05/17 03:02
最近接手一位离职同事的工作,程序开起来后内存蹭蹭蹭的往上涨,由于编译的是dll,没办法进行调试时加载程序分析。幸好后来找到umdh,简直是天助我也嘿嘿。闲话少说,开始我们的旅程。umdh内存泄露适用场合:1、dll内存泄露;2、长时间才出现的;3、实在找不出来了。。。
如果安装了windbg(下载地址见上文windbg符号表问题,曾经纠结的东东),那么umdh也附带安装了,位于windbg.exe同一级目录下。当然轻量级的umdh使用起来也非常简单.
一、设置环境变量,如上一文windbg设置,不然再执行umdh.exe的时候还是会下载环境变量的。
二、设置检测模式,启动同一目录下的gflags.exe。设置如下图所示。
三、cmd打开命令窗口调整到umdh目录下:
1、umdh.exe -pn:application_name.exe -f:FirstDump.txt,生成当前分析文件。过一段时间再执行2、umdh.exe -pn:application_name.exe -f:SecondDump.txt,生成当前分析文件,umdh.exe FirstDump.txt SecondDump.txt -f:Result.txt 将两次文件综合得到最终分析文件。
Result.txt文件很简单,每一段代表一次系统分配内存的动作,每一段最上为系统内核最终调用分配函数,比如ntdll!RtlAllocateHeap+00000274;最下则是应用层调用,并注明了在哪个文件的具体哪一行,清晰明了。除去一些系统的函数分配动作,剩下的就是我们程序产生的,很容易看懂到底哪里出现了内存泄露。
原创粉丝点击