欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Windows下进行内存泄漏检测--VLD

程序员文章站 2022-06-01 14:36:18
...

 

 

 

 

Windows下的应用程序在做内存泄漏测试时,无需重新编译的检测工具很少,只有(DR. Memory, UMDH等)少数软件,而且提示较不明确。而VLD(Visual LeakDetector)虽然需要重新编译,但是仅需增加一个include文件,且仅在debug模式下工作,对项目影响较小,可以考虑。

Visual Leak Detector is a free, robust, open-source memory leak detection system for Visual C++.

下面说说VLD的特点:

1) 可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在的文件及行号;

2) 可以得到泄漏内存的完整数据;

3) 可以设置内存泄漏报告的级别;

4) 它以动态库的形式提供,无需编译源代码,只需要很小的改动程序;

5) 源代码使用GNU许可发布,并有详细的文档及其注释

与VS自带的工具比较:The main difference between the CRT Debug Library and VLD, is that Visual Leak Detector shows you the complete callstack used for memory allocation has led to the leak.

分步指南

  1. 获取VLD
    1. 从项目官方网站获取:项目主页:http://vld.codeplex.com/
    2. 从Visual Studio的扩展和更新中,搜索VLD。可以找到Visual Leak Detector for Visual C++。
  2. 下载vld-2.5.1-setup.exe(当前的最新版)并安装,在安装过程中会出现
    Windows下进行内存泄漏检测--VLD
            
    
    博客分类: 测试测试 测试工具 windowsc++内存泄漏测试 
    默认是全部勾选的,直接Next至Finish。和以前的版本不一样,vld会将自己配置在VS上,所以我们现在不用再对自己的项目进行进行对vld的include头文件和library库文件的添加配置,我们需要用的时候只需要添加头文件:#include “vld.h” 即可。
  3. 新建工程, 打开项目属性, 就可以看到: (如果是已有项目,需自行添加引用的vld头文件目录)
    Windows下进行内存泄漏检测--VLD
            
    
    博客分类: 测试测试 测试工具 windowsc++内存泄漏测试 
  4. 新建源文件,文件名随便起一个: *.cpp ,在源文件中引用“include "vld.h"”即可。

    #ifdef _DEBUG

    #include "vld.h"

    #endif


    Windows下进行内存泄漏检测--VLD
            
    
    博客分类: 测试测试 测试工具 windowsc++内存泄漏测试 
  5. 选择Debug模式,运行:
    Windows下进行内存泄漏检测--VLD
            
    
    博客分类: 测试测试 测试工具 windowsc++内存泄漏测试 
  6. 结束程序后这样从debugger就可以知道程序中那里出现了内存泄漏了,上图我们可以看到问题出现在哪个文件以及哪一行。
  7. 如果不依赖IDE,则需要修改VLD的默认设置,让输出同时可以记录到文件中
  8. 修改vld安装目录下的vld.ini

    vld配置文件
    ReportFile = memory_leak_report.txt
    ReportTo = both
  9. 保证程序执行目录中同时保存有pdb文件
  10. 运行debug版程序后,同目录会生成vld输出文件,以供查看

 

注意:
1. 仅支持Visual Studio 2008-2015
2. VLD 内存检测工具,只能检测使用VC++编译器,不能用于检测MinGW编译器。所以如果使用跨平台的IDE如QT,请注意使用VLD时选择VC++编译器。
3. 仅工作在debug模式
4. 若程序包含多个dll,则每个dll都需要有至少一个C/C++文件包含 vld.h
5. QT可正常使用,暂未发现误报的问题