内存检测工具Dr.Memory在Windows上的使用

Posted fengbingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存检测工具Dr.Memory在Windows上的使用相关的知识,希望对你有一定的参考价值。

      之前在https://blog.csdn.net/fengbingchun/article/details/51626705 中介绍过Dr.Memory,那时在Windows上还不支持x64,最新的版本对x64已有了支持,这里再总结下。

      Dr.Memory源码地址https://github.com/DynamoRIO/drmemory,最新发布版本为cronbuild-2.5.19327,License为LGPL它支持Windows、Linux、Mac和Android平台

      Dr.Memory是一种内存监视工具,能够识别与内存相关的编程错误,例如:

      (1).访问未初始化的内存;

      (2).访问不可寻址(unaddressable)的内存(heap underflow and overflow);

      (3).访问释放的内存;

      (4).double free;

      (5).内存泄漏;

      (6).Windows上的:句柄泄漏(handle leaks)、GDI API使用错误;

      (7).对未保留的线程本地存储槽的访问.

      从https://github.com/DynamoRIO/drmemory/releases/tag/cronbuild-2.5.19327 下载DrMemory-Windows-2.5.19327.zip,解压缩即可,内有drmemory.exe可执行文件,有x86和x64两种。

      注意事项:

      (1).通过执行drmemory.exe --help 可查看支持哪些输入参数

      (2).执行方式: drmemory.exe [options] -- <app and args to run>

      (3).待检测的可执行程序需要在Debug模式下,虽然在Release模式下也能运行有结果,但是会存在很多误导信息;

      (4).生成的报告结果存放在解压缩后drmemory/logs目录下,目录名方式为:DrMemory-<appname>.<pid>.NNN目录的results.txt文件中, NNN是一个递增计数器,以确保名称唯一;

      (5).-light: 默认关闭,开启后只检测验证错误的轻量级模式;

      (6).-brief: 默认关闭,开启后显示简化且易于阅读的错误报告;

      (7).-visual_studio: 默认关闭,开启后直接在终端上显示报告,不会主动打开results.txt文件

      (8).-logdir: 指定输出结果存放的目录,使用此参数经常会有问题,弹出异常对话框;关闭此对话框,会继续执行;当再此执行时一般又会正常.

      测试代码还是采用之前的,执行命令如下:

E:\\test\\test_gtest\\DrMemory-Windows-2.5.19327\\bin64>drmemory.exe -visual_studio -logdir "../../../tmp"  -- ../../../../GitCode/Messy_Test/lib/dbg/x64_vc12/DrMemoryTest.exe

     执行结果如下所示:执行完后,会在../../../tmp目录下生成类似DrMemory-DrMemoryTest.exe.5112.000的目录,打开里面的results.txt文件,最后部分内容如下:通过搜索unaddressable、uninitialized、leak等关键字可快速定位问题

      GitHubhttps://github.com/fengbingchun/Messy_Test

以上是关于内存检测工具Dr.Memory在Windows上的使用的主要内容,如果未能解决你的问题,请参考以下文章

Windows系统中内存泄露与检测工具及方法

Windows中内存泄漏检测工具vld简介及使用

Dr.memory

Windows和Linux下排查C++软件异常的常用调试器与内存检测工具详细介绍

如何用VS工具检测内存泄露

Netty源码-内存泄漏检测toLeakAwareBuffer