Visual LeakDetector(VLD)是一款用于Visual C++的免费的内存泄露检测工具。它的特点有:(1)、它是免费开源的,采用LGPL协议;(2)、它可以得到内存泄露点的调用堆栈,可以获取到所在文件及行号;(3)、它可以得到泄露内存的完整数据;(4)、它可以设置内存泄露报告的级别。

默认情况下,只有在Debug模式下才会启用VLD的功能。

在使用的时候只要将VLD的头文件和lib文件放在工程文件中即可。

在需要检测内存泄露的源文件中添加#include “vld.h”

VLD只能在Windows下使用,它应用在C/C++语言中。

通过修改vld.ini文件(ReportFile选项),可以设置内存泄露报告的保存位置。

VLD好像对中文路径不支持。

VLD的各个版本对应适用于不同的VC/VS编译器,注意选择合适的版本。

1.        从http://vld.codeplex.com/SourceControl/latest#README.md下载最新源代码,解压缩,里面包含有源码、vs2010工程配置、以及一些依赖库,如dbghelp等;

2.          打开vld_vs10.sln,在32位/64位下,分别编译debug和release下vld工程,会在当前目录下生成bin文件夹,里面包含相应的库文件;

3.          新建控制台工程VLDtest,在Debug下运行,代码如下:

stdafx.cpp:

  1.  
    #include "stdafx.h"
  2.  
     
  3.  
    #ifdef _DEBUG
  4.  
    #pragma comment(lib, "../../../src/VLD/bin/Win32/Debug/vld.lib")
  5.  
    #else
  6.  
    //#pragma comment(lib, "../../../src/VLD/bin/Win32/Release/vld.lib")
  7.  
    #endif

VLDtest.cpp:

  1.  
    #include "stdafx.h"
  2.  
    #include "../../src/VLD/vld.h"
  3.  
    #include <iostream>
  4.  
     
  5.  
    using namespace std;
  6.  
     
  7.  
    void fun()
  8.  
    {
  9.  
    char* tmp = new char[10];
  10.  
    memset(tmp, 0, 10);
  11.  
    }
  12.  
     
  13.  
    int main(int argc, char* argv[])
  14.  
    {
  15.  
    fun();
  16.  
     
  17.  
    cout<<"ok!"<<endl;
  18.  
     
  19.  
    return 0;
  20.  
    }

4.          运行提示,“无法启动此程序,因为计算机中丢失vld_x86.dll”,解决方法,将bin/Win32/Debug/vld_x86.dll拷贝到VLDtest执行目录下或将vld_x86.dll路径添加到系统环境变量中;

5.          运行提示,“应用程序无法正常启动(0xc0150002)”,将源代码中的/setup/dbghelp/x86文件夹下的dbghelp.dll和Microsoft.DTfW.DHL.manifest两个文件拷贝到VLDtest执行目录下即可;

6.          直接按F5运行,可以在Output窗口显示内存泄漏的相关信息,包括发生内存泄漏的文件名和行号,双击即可定位到内存泄漏的具体位置;

7.          或者直接运行,相关信息可以显示在命令行窗口中;

8.        也可将内存泄漏信息写入文件中,将源代码中的vld.ini文件拷贝到VLDtest工程目录下,即与VLDtest.vcxproj同目录,修改vld.ini文件中的选项参数,ReportFile = .\../../../lib/dbg/x86_vc10/memory_leak_report.txt,ReportTo =both(原始ReportTo = debugger),重新运行后,会在执行目录下生成一个memory_leak_report.txt文件;或者将vld.ini文件拷贝到执行目录下,运行VLDtest[dbg_x86_vc10].exe文件也可生成报告文件;

9.          在Release下运行,VLD不起作用,VLDtest工程不用作任何配置和调整;

10. 也可不用编译源代码,直接从http://vld.codeplex.com/releases下载,然后安装即可,里面包含需要的库和头文件。

图中为运行测试代码时显示的内存泄漏信息:

内存泄漏检测工具VLD在VS2010中的使用举例的更多相关文章

  1. Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

    那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...

  2. C++内存泄漏检测工具

    C++内存泄漏检测工具 1.VC自带的CRT:_CrtCheckMemory   调试器和 CRT 调试堆函数 1.1用法: /************************************ ...

  3. C/C++的内存泄漏检测工具Valgrind memcheck的使用经历

    Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Lin ...

  4. android 内存泄漏检测工具 LeakCanary 泄漏金丝雀

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 内存泄漏检测工具 android 内存泄漏检测工具 ======== 内存泄漏 就是  无用的对 ...

  5. 转载:C/C++检测内存泄漏的工具 vld Visual Leak Detector223 的使用方法和sample示例

    这类的工具有 比如 :LeakDiag leakfinder "Visual Leak Detector" vld可以从http://vld.codeplex.com/releas ...

  6. 【转】Unix下C程序内存泄漏检测工具Valgrind安装与使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

  7. Linux C/C++内存泄漏检测工具:Valgrind

    Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和 ...

  8. Android 内存泄漏检测工具 LeakCanary(Kotlin版)的实现原理

    LeakCanary 是一个简单方便的内存泄漏检测框架,做 android 的同学基本都收到过 LeakCanary 检测出来的内存泄漏.目前 LeakCanary 最新版本为 2.7 版本,并且采用 ...

  9. 在VS2017中配置VLD(Visual Leak Detector)内存泄漏检测工具

    首先在官方下载VLD 下载地址: https://kinddragon.github.io/vld/ 此版本为V2.5.1,为最后发布版本,下载后安装.加入你的安装路径为:VLD_Path,后面会用到 ...

随机推荐

  1. python应用-matplotlib绘图

    详细内容参看:官网 测试数据: # 传入的参数 x=[1,2,3,4,5] squares=[1,4,9,16,25] 简单的绘图 import matplotlib.pyplot as plt de ...

  2. Yii关键概念

    basic/ 应用根目录 composer.json Composer 配置文件, 描述包信息 config/ 包含应用配置及其它配置 console.php 控制台应用配置信息 web.php We ...

  3. Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息

    1. 加载大图片到内存,从gallery获取图片 android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常, 需要将图片等比例缩小到适合手机屏幕分辨率, 再加载. 从gallery ...

  4. Linux删除(清空)正在运行的应用日志文件内容 及 查看服务器剩余空间

    在测试环境定位问题时,如果发现日志文件内容太多或太大,有时需要删除该日志,如Tomcat,Nginx日志.以前每次都是先rm -rf ***.log,然后重启应用.直到后来发现了以下命令,原来可以不用 ...

  5. thinkphp3.2笔记(2)调试模式,配置项C,创建模块, 四种URL模式,URL生成,跳转

    一.调试模式 TP的调试模式其实就控制了TP关于配置信息以及函数的缓存功能 如果开启了调试模式,每次访问项目,Tp都会去加载最新的配置以及函数信息. 如果关闭了调试模式,当tp第一次访问时会降配置以及 ...

  6. flutter 安装详细教程

    Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量原生 UI 的移动 SDK.Flutter 兼容现有的代码,免费且开源,在全球开发者中广泛被使用. 安 ...

  7. [html5]HTML5中<section>和<article>的区别

    一.section元素 从字面理解就是区块.部分的意思,相对于article元素更加广泛,每个区块都可以使用,比如页面里的导航菜单.文章正文.文章的评论等. 1.section元素用于对网站或应用程序 ...

  8. 递归--练习11--noi9273 PKU2506Tiling

    递归--练习11--noi9273 PKU2506Tiling 一.心得 25 a[i]%=10;(高精度时) 26 这里错了,花了好久改好 27 28 29 int* f(int n){ 30 if ...

  9. git报错:src refspec master does not match any

    问题出现:git推送本地内容到远程仓库时,报错src refspec master does not match any. 1.我的流程: mkdir project_k命令,新建本地仓库. cd p ...

  10. 利用JS将页面中包含“一个”字段值的元素改为红色

    document.body.innerHTML = document.body.innerHTML.replace(/一个/ig,"<span style='color: red;'& ...