使用 VLD 检测内存泄漏
背景
在实际的项目实践中,随着程序越复杂,内存管理就显得越重要。虽然有许多方法可以防止内存泄露,但在实践中还是难免出现内存泄露的情况,并且内存泄露问题很难被发现和定位其位置。
VLD
Visual Leak Detector 是一款用于 C++ 的免费内存泄露检测工具,并且它在检测到内存泄露的同时还可以得到内存泄露时的调用堆栈以及所在文件和行号。
Visual Leak Detector下载地址:
VLD 主页:https://kinddragon.github.io/vld/
文档地址:https://github.com/KindDragon/vld/wiki
GitHub 地址:https://github.com/KindDragon/vld
VLD 的使用
①.安装
从主页下载安装包后直接默认安装即可;也可以下载源码编译生成库文件使用。
②.目录说明
VLD 安装后的目录如下所示:
bin:包含了运行时的库文件 - dbghelp.dll、vld_x64.dll
include:包含了编译时要用到的头文件 - vld.h、vld_def.h
lib:包含了编译时要用到的库文件 - vld.lib
vld.ini:vld 的配置文件,可以将其拷贝到程序运行目录,以仅对该程序时生效
③.项目配置
需要在项目属性中配置 vld 头文件及库文件路径:
附加包含目录:C:\Program Files (x86)\Visual Leak Detector\include
附加库目录:C:\Program Files (x86)\Visual Leak Detector\lib\Win32
附加依赖项:vld.lib
④.拷贝动态库
把 bin 中的相关文件拷贝到项目的运行目录中:
⑤.程序运行
在项目的 main.cpp 文件中添加头文件:include<vld.h>。然后在 Debug 模式下运行程序,VLD 会输出内存泄漏报告,其中包含了完整的调用堆栈。
⑥.VLD 配置文件说明
配置文件中关键参数:
MaxTraceFrames:输出的堆栈级数限制
AggregateDuplicates:若为"yes",则只在报告中输出特定泄漏位置的第一次泄漏
MaxDataDump:转储数据大小限制
ReportTo:内存泄漏报告的输出形式,可以使用"debugger"、 "file"或者 “both”
ReportFile:内存泄漏报告的文件名,默认"memoryleakreport.txt"
应用示例
①.内存泄漏代码
#include "vld.h"int main()
{int *p = new int(20);return 0;
}
②.代码运行
如上图所示,vld 检测出内存泄露时的调用堆栈及所在行号,双击即可定位到代码目录。
③.报告分析
报告中包含了几个内容:
【Block X at …: Y bytes】第 X 个块(new)泄漏了 Y 个字节;
【Call Stack】泄漏内存的堆栈信息,双击对应的行可以跳到具体代码位置;
【Data】泄漏内存的数据信息;
【Visual Leak Detector detected X memory leak (Y bytes).】总共 X 处泄漏,共泄漏字节数 Y 字节;
④.修改代码
定位内存泄漏代码并修改代码后:
注意事项
工程目录中不能包含中文,否则 vld 将不能显示调用堆栈信息,如下图所示:
使用 VLD 检测内存泄漏相关推荐
- QT使用VLD检测内存泄漏
QT使用VLD检测内存泄漏 下载VLD VLD版本:vld-2.5.1-setup 下载地址:https://kinddragon.github.io/vld/ 安装VLD 直接双击安装,选择安装位置 ...
- Qt Creator 中使用VLD检测内存泄漏
简介 Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具.相比较其它的内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点:可以得到内存泄漏点的调用堆 ...
- qt5使用内存检测工具vld查看内存泄漏
什么是vld? Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具.相比较其它的内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点: 1. 可以得到 ...
- vs2008 使用Visual Leak Detector检测内存泄漏
http://hi.baidu.com/maydaygmail/item/8ea6ebef87ca9103560f1dfe 转自:http://hi.baidu.com/sunchongjing/bl ...
- 使用 Visual Leak Detector 检测内存泄漏
个人心得:挺不错,可以定位到指针所在文件,甚至是函数及行号.使用也挺方便. 感谢开源代码!http://vld.codeplex.com/ 转载自:http://www.51testing.com/? ...
- 如何检测内存泄漏(转)
编者按: 这几天在调试课本上关于二叉树的有关代码,发现严的这本数据结构教程喜欢把简单问题复杂化,当然这是从学生角度出发,从个人角度出发,这本书注重代码的可读性.重用等,更侧重于与软件工程.软件组织结合 ...
- VC使用CRT调试功能来检测内存泄漏
信息来源:csdn C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:"最大的长处也可能成为最大的弱点",那么 C/C++ 应用程序正好印证 ...
- 如何在linux下检测内存泄漏
1.开发背景 在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名.行号 ...
- VC使用CRT调试功能检测内存泄漏(转载)
/*********************************************************************************** 检测内存泄漏的基本工具是调试器 ...
- VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏[转]
/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:"最大的长处也可能成为最大的弱点",那么 C/C++ 应用程序正好印证了这句话.在 C/C++ 应用程 ...
最新文章
- 腾讯联姻开心网意欲何为
- 科沃斯机器人双十一全渠道成交额超7亿 两大爆款单品携手破亿
- Android BlueBorne (CVE-2017-0781)漏洞分析和利用
- Link State ID
- 税收java_String 类中的 isEmpty() 是判断字符串是否为空的,如果为空返回 true ,不为空返回 false 。 (1.0分)_学小易找答案...
- 【神经网络】神经网络结构在命名实体识别(NER)中的应用
- Codeforces Round #628 (Div. 2) E. Ehab‘s REAL Number Theory Problem 巧妙的质因子建图
- oracle查询结果存入临时表,Oracle查询问题引发临时表使用
- typedef struct和struct区别
- 看ct片子的软件_X光、CT、核磁、B超的辐射到底对孩子有多大影响?
- 纽约州交通事故数据可视化
- 题目47:最大公约数
- openCV视频教程
- 测试之smart原则
- 重载运算符高精度算法
- 高性能web 架构之 mysql 读写分离
- 2022山东国际养老服务业博览会,智慧养老产业展会
- 使用SQL语句创建并管理数据表
- mysql 冷热表_mysql 冷热备份
- 很简单的x2m格式转换为mp3方法