转载出处:http://blog.csdn.net/phiger/article/details/1932141

  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查找内存泄漏的更多相关文章

  1. Windows下使用Gflags和UMDH查找内存泄漏

    GFlags和UMDH与WinDbg一样,都是Debugging Tools for Windows里的工具. 1.设置符号路径 去微软官网下载对应的操作系统的符号安装文件,并安装到某个目录,如C:\ ...

  2. 利用Java剖析工具JProfiler查找内存泄漏的方法

    本文主要介绍如何如何利用在使用JProfiler时意识到内存泄漏以及查找内存泄漏的几种方法. 工具/原料   JProfiler 方法/步骤   JProfiler的内存视图会话提供了内存使用情况的动 ...

  3. 使用UMDH查找内存泄露

    参考文献: 1.http://blog.csdn.net/wcjy07220114/article/details/6962140 2.http://blog.csdn.net/chenyujing1 ...

  4. java命令--jmap命令使用(查找内存泄漏对象)

    转自:https://www.cnblogs.com/kongzhongqijing/articles/3621163.html jdk安装后会自带一些小工具,jmap命令(Java Memory M ...

  5. Linux 下用 valgrind 查找内存泄漏小例子

    1.安装 valgrind yum install valgrind 2.测试用例 main.cpp #include <iostream> using namespace std; st ...

  6. 教程:查找内存泄漏 (JavaScript)

    本主题带领您完成使用 JavaScript 内存分析器确定并修复简单内存问题的过程.在本教程中,我们创建一个生成大量数据的应用程序.我们预期在导航到新页时该应用程序会释放数据.  说明 JavaScr ...

  7. 用CRT查找内存泄漏

    引用原文地址 : https://msdn.microsoft.com/en-us/library/x98tx3cf.aspx 1. 在program中严格按下面顺序include #define _ ...

  8. Xcode查找内存泄漏

  9. Memlab,一款分析 JavaScript 堆并查找浏览器和 Node.js 中内存泄漏的开源框架

    Memlab 是一款 E2E 测试和分析框架,用于发现 JavaScript 内存泄漏和优化机会. Memlab 是 JavaScript 的内存测试框架.它支持定义一个测试场景(使用 Puppete ...

随机推荐

  1. 通过LR监控Linux服务器性能

    1)设置监控服务器要监控 UNIX 资源,必须配置 rstatd 守护程序.注意,可能已经配置了 rstatd守护程序,因为当计算机收到一个 rstatd 请求时,该计算机上的 inetd 自动激活r ...

  2. array_intersect_assoc用法详解

    最近在做考试系统,想到这个数组函数,用法如下: <?php $a1=array('a','b','d','c','d','b','c','a'); $a2=array('b','d','d',' ...

  3. PHP中is_*() 函数用法

    PHP中is_*() 函数用法 is_a - 如果对象属于该类或该类是此对象的父类则返回 TRUE is_array - 检测变量是否是数组 is_bool - 检测变量是否是布尔型 is_calla ...

  4. css新单位 vw , vh

    考虑到未来响应式设计的开发,如果你需要,浏览器的高度也可以基于百分比值调整.但使用基于百分比值并不总是相对于浏览器窗口的大小定义的最佳方式,比如字体大小不会随着你窗口改变而改变,如今css3引入的新单 ...

  5. RSA/DSA 密钥的工作原理

    下面从整体上粗略的介绍了 RSA/DSA 密钥的工作原理.让我们从一种假想的情形开始,假定我们想用 RSA 认证允许一台本地的 Linux 工作站(称作 localbox)打开 remotebox 上 ...

  6. 11-hibernate,单表GRUD操作实例

    1,save 2,update 3,delete 4,get/load(查询单个纪录) 实例代码: import java.io.File; import java.io.FileInputStrea ...

  7. Java Collection之Queue具体解释及用途

    Queue是一种常见的数据结构,其主要特征在于FIFO(先进先出),Java中的Queue是这样定义的: public interface Queue<E> extends Collect ...

  8. maven 动态版本 aliyun阿里云Maven仓库地址——加速你的maven构建

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. kettle--组件(2)--计算器

    组件如下: 对计算类型的说明如下: The table below contains descriptions associated with the calculator step: Functio ...

  10. 电子商务(电销)平台中用户模块(User)数据库设计明细(转载)

    电子商务(电销)平台中用户模块(User)数据库设计明细 以下是自己在电子商务系统设计中的订单模块的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 用户基础表(user_base) ...