• Visual Leak Detector 2.5.1 (VLD)下载、安装与使用


    目录

    1 软件介绍

    2 下载与安装

    2.1 工具下载地址

    2.2 工具安装

    3 配置与使用

    3.1 配置环境变量

    3.2 配置vs

    3.3 VLD的配置

    4 测试代码与报告生成


    1 软件介绍

    Visual Leak Detector 2.5.1 (VLD)是一个小巧内存检测工具,是为Visual C++用户设计的。其特色为:

    1. 简单易用,只需要在需要进行内存泄漏检测的的主程序代码中加入#include "VLD.h“,并将编译好的Lib文件放入默认的库目录,然后在Visual C++用Debug模式编译运行程序,程序运行结束后便可在Visual C++的输出窗口看到内存泄露检测结果。
    2. 通过宏定义控制测试行为,如报告的详略等。
    3. 支持Windows X64。
    4. 检测报告很直观,甚至能显示泄漏内存的内容

    2 下载与安装

    2.1 工具下载地址

    Visual Leak Detector 官网下载地址:Visual Leak Detector | Enhanced Memory Leak Detection for Visual C++,点击 Download Installer 绿色按钮可下载工具的安装程序 vld-2.5.1-setup.exe。

    也可去 Git 仓库 releases 界面 下载安装程序 vld-2.5.1-setup.exe

    还可以使用国内的网络资源下载:百度网盘-vld-2.5.1-setup.exe

    2.2 工具安装

    点击next

    继续点击next

    勾选三个,然后点击next

    确认自己的设置,确认一下,需要修改则点击Back返回修改,否则点击install进行安装。

    注意:安装前需要关闭Visual Studio

    安装完成后的目录结构:

    3 配置与使用

    3.1 配置环境变量

    找到Visual Leak Detector的安装目录,复制路径,把路径配置到环境变量中。Vld支持32位和64位,以防万一我们都配置上。

    3.2 配置vs

    打开vs,我这里使用的是vs2017,根据自己版本进行配置。

    选择主工程,右键打开属性界面,找到“配置属性-VC++目录-包含目录/引用目录

    配置Visual Leak Detector的lib和include目录,如图所示。

    找到“配置属性-C/C++-预处理器-预处理器定义“,点击”编辑“进入编辑框,输入【_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING】,点击确定保存,如图所示

    VLD默认在程序结束后生成报告,默认生成得报告显示在调试窗口和输出窗口中,在“配置属性-链接器-调试-生成调试信息”下拉选项框中选择【生成经过优化以共享和发布的调试信息(/DEBUG:FULL)】,如图所示

    https://img-blog.csdnimg.cn/img_convert/eabf7a681fc2e755abf72d35958a2a6c.png

    3.3 VLD的配置

    使用的时候需要把以下几个选中的文件复制到工程中,如图所示

    3.2说到可以在调试窗口和输出窗口显示调试信息,但也可以让调试信息输出到文件中,看的时候更加清晰明了。

    上图中的vld.ini便可以进行配置。

    ReportTo默认为debugger,意思是输出到调试窗口,改为file就输出到文件中了,通过ReportFile配置文件生成得位置,如图所示

    • 在对于debug下文件中添加#include "vld.h"#pragma comment(lib, "vld.lib")便可使用VLD了
    • 如果是release版本,还需要添加在#include "vld.h"前加一条#define VLD_FORCE_ENABLE,否则将不能进行内存泄漏的检测

    4 测试代码与报告生成

    可以用以下代码进行测试:

    1. #include
    2. #include
    3. #include
    4. #include "vld.h"
    5. #pragma comment(lib, "vld.lib")
    6. using namespace std;
    7. int main()
    8. {
    9. cout << "start" << endl;
    10. static int *a = new int;
    11. int *arr = new int[10];
    12. int aaa = 10;
    13. //delete a;
    14. cout << "end" << endl;
    15. return 0;
    16. }

    编译完成点击F5启动进程,如图所示

    查看报告,可以看到有几处内存泄露,并且定位到内存泄露点的代码行,如图所示:

    进入代码中查看,可以看到这两行没有被释放

    手动释放一下再测试,可以看到已经没有内存泄露的地方了:

     

  • 相关阅读:
    【0143】 System V共享内存(Shared Memory)
    SpringBoot 博客网站
    SpringBoot使用git-commit-id-maven-plugin打包
    kafka消费/发送消息,消息过大报错解决whose size is larger than the fetch size 1048576
    【k8s】3、kubeadm安装k8s集群
    2-3 Moves Codeforces 1716A
    MySQL(二)——约束
    【论文笔记】Language Models are Unsupervised Multitask Learners
    分布式调度 Elastic-job
    ​力扣解法汇总946-验证栈序列
  • 原文地址:https://blog.csdn.net/qq_41567921/article/details/134315982