vld内存泄露检测工具介绍及基本原理分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vld介绍及基本原理分析
作者:何锟
目录
内容导读 (2)
一、vld简介 (2)
二、vld使用方法介绍 (2)
使用步骤 (2)
使用举例 (2)
配置文件(vld.ini)说明 (3)
原理分析分析与思考 (4)
关键技术 (4)
流程分析 (4)
钩子程序分析 (5)
优缺点分析与改进 (6)
优缺点: (6)
改进思考 (6)
内容导读
本文分包括这几个部分:
1、Vld简介
2、Vld使用方法介绍
3、vld原理分析分析
4、vld优缺点分析与改进
一、vld简介
vld全称:Visual Leak Detector
发展历史:2005年~ 2016年,Version 2.5.0
版权:免费、开源
用途:检测windows c/c++程序内存泄露,并且输出详细报告
二、vld使用方法介绍
使用步骤
1、集成到工程
在工程任意位置包含头文件”vld.h”、并且指定静态库路径”vld.lib”,编译时需要宏_DEBUG或VLD_FORCE_ENABLE
2、运行程序
运行环境:debughelp.dll, vld.dll,vld.ini
3、执行测试用例
4、关闭程序时生成了内存测试报告(文本文件或IDE输出窗口)
5、根据报告分析内存泄露
使用举例
源码
编译运行后,可以看到IDE的输出窗口中输出内容
注意:报告还可以输出到txt文件,默认名称为memory_leak_report.txt 配置文件(vld.ini)说明
Vld.ini里面有详细的说明。其中常用的选项有:
1:开启或关闭内存测试
2:报告中是否去掉重复的堆栈
3:函数调用栈的最大深度
4:泄露内存打印的字节数
原理分析分析与思考
关键技术
windows 和linux 上的原理差不多,Linux 上的实现相对可能要简单一些。需要以下知识: 1、 api hook 2、 PE 文件知识
2、程序执行过程(装载、执行、卸载流程)
3、输出函数调用栈
(普通程序和vld
钩子程序分析(一)内存申请过程
VLD钩子源码:
(二)内存释放过程
VLD钩子源码:
优缺点分析与改进
优缺点:
优点:方法简单、无需太多编码,并且能输出完整的函数调用栈
缺点:
1、程序运行性能受影响
2、需要将vld编译到目标工程中
3、当存在嵌套内存申请时,有时候只忘记了一个delete,但是报告了很多嵌套的泄露改进思考
1、改进源码进行性能优化
2、将Vld从工程中分离
3、动态开关、实时输出大内存分析报告