使用LeakDiag调试内存泄漏

LeakDiag是一种用于检查进程内存泄漏的工具。LeakDiag功能是UMDH.exe功能的超集。UMDH只能显示标准堆管理器的分配信息,而LeakDiag还能显示com分配信息(包括内部和外部的),虚拟内存分配信息以及其它分配信息。LeakDiag在记录内存分配的栈回溯时不依赖操作系统的支持,而是通过Detours技术来拦截对内存分配的调用。这款工具的下载地址:ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LeakDiag/

初始化设置

Tools-Options

打开菜单Tools->Options,这里就是一些设置选项。你可以设置log文件的存放路径。也可以设置符号搜索路径,勾上在生成log时解析符号选项,就会把log中函数栈地址转换成函数名。不过这个解析符号的工作比较耗费时间。默认的微软符号是srv*c:symcache*http://msdl.microsoft.com/download/symbols

我建议在生成log的时候不要勾上在生成log时解析符号选项,因为这个会影响要调试进程的运行速度,导致某些跟时间相关的内存泄漏不在发生。

我们可以在事后根据dmp文件和符号文件重新去解析log文件。

 记录进程内存分配

Main-LeakDiag

LeakDiag可以记录一下集中内存分配器的动作:

  • Virtual Memory Allocator
  • Windows Heap Allocator
  • MpHeap Allocator
  • COM Allocator
  • COM Internal Allocator
  • C Runtime Allocator

我们选中要调试的进程,然后在选择一种内存分配器,点Start按钮,就开始记录这种内存分配器的内存泄漏情况。我们可以同时选择多在内存分配器。

运行程序,觉察到内存增长的时候,点Log按钮,就可以生成log文件。

分析log文件

LeakDiag生成的log文件是xml格式,如下:

看内容就知道里面是什么意思了,就不多说了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注