1. VLD简介

Visual Leak Detector是一个免费的,强大的,开源的,可视化C ++内存泄漏检测工具。

VLD容易使用。安装后,只需告诉Visual C ++在哪里可以找到包含的头文件和库文件。然后,只需将以下行添加到代码中,即可将其与任何C/C++项目一起使用:

#include <vld.h>

在Visual Studio调试器下运行程序时,Visual Leak Detector将在以下位置输出内存泄漏报告:调试会话结束。泄漏报告包括完整的调用堆栈,该堆栈显示了如何分配泄漏的内存块。双击调用堆栈中的一行以跳转到该文件,然后在编辑器窗口中一行。

这是在C/C++应用程序中快速诊断和修复内存泄漏的非常有效的方法。

2. VLD安装

2.1官网地址:https://archive.codeplex.com/?p=vld

2.2下载地址:https://github.com/KindDragon/vld/releases/download/v2.5.1/vld-2.5.1-setup.exe

2.3安装VLD:一般会默认安装在"C:\Program Files (x86)\Visual Leak Detector"目录下

2.4安装过程中默认把VLD的头文件和库的目录添加到VC项目中

3. VC项目中配置VLD

3.1属性-C/C++-常规-附加包含目录,检查VC项目是否包含了VLD的头文件目录,如果没有则添加

3.2属性-链接器-常规-附加库目录,检查VC项目是否包含了VLD的库目录,如果没有则添加

3.3添加vld.lib

属性-C/C++-输入-附加依赖项添加vld.lib

3.4在每个分配的内存的文件里添加#include "vld.h"

3.5如果源文件太多,手工添加#include "vld.h"太麻烦,可以使用下面的脚本来添加

#!/usr/bin/perl
if($#ARGV < 0){print "the arguments is too few!!\n";
}
print "dir ",@ARGV;
my $indir = $ARGV[0];
#
#&replace_text("test.txt");
&find_fileindir("$indir");sub find_fileindir(){local($dir) = @_;opendir(DIR,"$dir"|| die "can't open this $dir");local @files =readdir(DIR);closedir(DIR);for $file (@files){next if($file=~/\.$/ || $file =~/\.\.$/);if(-d "$dir/$file"){find_fileindir("$dir/$file");}elsif($file=~/.cpp$/ || $file=~/.c$/){print "replace $dir/$file\n";&replace_text("$dir/$file");}}
}sub replace_text(){local($filename) = @_;open(DATA,"<$filename") or die "无法打开数据";@lines = <DATA>;$_=join "", @lines;#print $_;close(DATA);if($_ !~ /#include "vld.h"/){s/^/#include "vld.h"\n/;}else{print "the file has been replaced, skip it.\n";}#print $_;open(DATA2,">$filename") or die "无法打开数据";print DATA2 $_;close(DATA2);
}

运行该脚本perl readdir.pl <目录>,.cpp和.c文件将会自己添加#include "vld.h"。如果项目的头文件也有分配内存的地方,那么将脚本的第22行改成}elsif($file=~/\.cpp$/ || $file=~/\.c$|| $file=~/\.h$/){

4. 检测内存泄露

4.1选择debug模式

4.2 按CTRL+F5运行,程序结束时输出窗口将打印检查报告,如图

在输出窗口也可以看到同样的输出信息。

5.输出到文件

如果要想把产生的日志保存到文件中,需要将vld.ini(VLD安装目录下)复制到可执行文件的目录下,然后作如下修改:

ReportFile =.\memory_leak_report.txt

ReportTo = both

重新运行即可生成检查报告

6. 注意事项

6.1VLD只在debug版本有效,不要在release版本测试

6.2 如果有include"stdafx.h",则include <vld.h>放在其后,否则放在最前面

6.3 不要在QT中使用VLD,QT控件分配内存比较特殊

6.4VLD有一类内存泄露检查不出来,给指针分配了数组内存,但是释放的时候忘了加[], 如下:

    int *p = new int[10];delete p;

7.总结

VLD是一款非常优秀的内存泄露检查工具,程序在移植之前就先检查一下内存泄露问题,将会提高工作效率,减少麻烦!VLD是windows下的内存检测工作,后面我会介绍更强大的工具AddressSanitizer.

检查内存泄露的利器--VLD使用指南相关推荐

  1. armv6 可以通过什么方式检查内存泄露?

    armv6 可以通过什么方式检查内存泄露? 在 ARMv6 架构上进行内存泄漏检测,可以尝试使用以下工具: LeakSanitizer:LeakSanitizer 是 Clang/LLVM 工具链的一 ...

  2. 检查内存泄露的工具--valgrind

    今天面试的时候问了一下怎么检查内存泄露,然后我就有点懵,现在开发基本都用智能指针了,以前用的时候也很少碰见内存泄露的问题,基本都是瞎调试.只依稀记得有这么一个工具可以用来检测内存泄露,实际没用过,只好 ...

  3. Visual Leak Detector 帮助检查内存泄露

    计算机为 win7,X64,vs2010 http://vld.codeplex.com/releases 从上述地址下载vld-2.3-setup.exe 安装后,打开vs2010在项目属性--VC ...

  4. 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露

    valgrind官网:http://valgrind.org/ 1.安装方法 第一种方式:下载目前最新的源码,编译安装,在服务器上推荐这种方式 wget http://valgrind.org/dow ...

  5. vs调试c语言检查内存泄露,VisualStudio中检查内存泄露方法

    项目工程中存在内存泄露,被折磨了一晚上,终于查了出来,因为之前没有相关的经验,还比较生疏,在此记录下来,方便以后查找. 对于malloc出的内存的检测方法 这篇文章中详细地记录了从检查到找到确定位置到 ...

  6. 内存泄露检测工具VLD相关配置

    参考链接: VLD(Visual LeakDetector)内存泄露库的使用 VS2019编译 内存泄漏检测工具VLD 一.源码下载 源码下载链接:https://github.com/KindDra ...

  7. 如何检查内存泄露问题

    简单说一下在没有工具的情况如何运用VC库中的工具来检查代码的内存泄漏问题. 一: 内存泄漏 内存泄漏是编程中常常见到的一个问题,内存泄漏往往会一种奇怪的方式来表现出来,基本上每个程序都表现出不同的方式 ...

  8. BoundsChecker检查内存泄露

    网上有几篇文章是写BoundsChecker的,主要是讲用途在哪,对于我这初学的,连基本使用步骤还不会,运用到实际项目中就更加困难,而且DevPartner这个软件网上有几个版本,有些个下载安装好,根 ...

  9. C++ 检查内存泄露工具

    cppcheck (推荐):Cppcheck 是一种 C/C++ 代码缺陷静态检查工具.不同于 C/C++ 编译器及很多其它分析工具,它不检查代码中的语法错误.Cppcheck 只检查编译器检查不出来 ...

最新文章

  1. 【C语言运算符大全】快速学会C语言运算符
  2. python怎么将输入的数字变成列表_Python键盘输入转换为列表的实例
  3. Java基础知识:IO
  4. 函数onsize()与onsizing()区别
  5. 内存四区 malloc/free与new/delete的区别
  6. P2052-[NOI2011]道路修建【树】
  7. 杂项-EMS:CRM
  8. DIV CSS BackGround属性研究
  9. 10种进阶方法让你快速测试端口连通性
  10. oracle年龄计算函数天 月 年,如何使用Oracle获得年龄,月份和天数的年龄
  11. colorbox去除close关闭按钮,附上colorbox的基本使用方法
  12. [ML-03] Matplotlib-3
  13. 前端通过【bitly】Api,将长链接转换短连接
  14. c++可视化 横向打印二叉树(连线、规整)
  15. 大数据技术与应用4-4MapRuduce
  16. PPM与mg/m3的转换公式
  17. 智慧灌区信息化解决方案
  18. 【电力电子技术】Unit 2 电力电子器件
  19. H264编解码SPS、PPS参数说明
  20. 记录一些最近用过的编码转换

热门文章

  1. 聊一聊B端和C端产品的区别
  2. Java知识体系最强总结(2021版)
  3. 合成大西瓜之抱歉~ 我只有大西瓜和刀剑神域~!!
  4. 网易有道词典总是提示网络连接失败--解决办法
  5. 生活随记 - 惋惜卡哇伊
  6. LaTex 之 数学运算符号
  7. LNK1104:无法打开文件kernel32.lib的解决方法解决方法
  8. 三大门派var,const,let之间的纠纷
  9. Spring高手之路——深入理解与实现IOC依赖查找与依赖注入
  10. 关于socket中的send函数