内存泄漏工具(VLD)使用说明

VLD是开源的,遵循LGPL协议(http://vld.codeplex.com/

一、VLD的能力

1、对于每一个泄漏块都提供包含文件名、行数等信息的全部堆栈(需要PDB支持)

2、可以发现包括COM和Windows堆在内的绝大部分进程内(in-process)内存泄漏

3、可以排除检查指定的模块甚至EXE本身

4、支持以十六进制和ASCII形式转储泄漏块的全部数据

5、可以自定义内存泄漏报告,包括形式和方式

二、如何使用VLD

在正式使用VLD之前,必须设置VC++的include和library查找路径( Tools ->Options -> Projects and Solutions-> VC++ Directories),要在程序中使用VLD:

1、 需要有至少一个C/C++文件包含 vld.h

2、 若程序包含多个dll,则每个dll都需要有至少一个C/C++文件包含 vld.h

3、 使用Debug选项编译

若程序由VC++调试启动,则进程退出时VLD会在输出窗口显示内存泄漏报告,双击报告内的栈,可以跳转到相应的源码文件。

三、一些有用的选项

VLD提供了一些配置项,可以通过vld.ini设置,默认情况将使用安装目录下的vld.ini,也可以将vld.ini拷贝到程序运行目录,这样仅当运行该程序时生效。

MaxTraceFrames:输出的堆栈级数限制

AggregateDuplicates:若为"yes",则只在报告中输出特定泄漏位置的第一次泄漏

MaxDataDump:转储数据大小限制

ReportTo:内存泄漏报告的输出形式,可以使用"debugger"、 "file"或者 "both"

ReportFile:内存泄漏报告的文件名,默认"memoryleakreport.txt"

四、VLD实现原理

Vld通过修改IAT表将crt的调用替换为自己的实现,并记录分配时的调用堆栈,相比通过宏替换new/delete、malloc/free,具有以下好处:

1、无需编译时对每个c/c++文件都包含指定头文件

2、可以运行时控制内存泄漏检查策略

3、具有很好的扩展性,例如支持vc11引入的_aligned_malloc

 

以上思路可用于检查其他泄漏,例如用户对象泄漏、GDI泄漏、句柄泄漏等


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值