在vs中使用 vld 进行内存泄漏检测
- 下载 vld
https://github.com/KindDragon/vld
- 安装 vld 后记录安装目录
C:\Program Files (x86)\Visual Leak Detector
- 拷贝 bin目录下文件到当前源码目录中
拷贝至
将 头文件和lib库引入工程文件
放入源码目录 上一层 和 .sln 一个文件夹
Include/vld 文件夹
Lib 文件夹
头文件,注意 vld 需要在 #include <afxwin.h> 头文件之前使用
#define VLD_FORCE_ENABLE
#include "../Include/vld/vld.h"
#pragma comment(lib, "../lib/vld.lib")
在main函数中使用
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{if(!AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0)){return 1;}// 使用 vld 宏开启VLDGlobalEnable();VLDReportLeaks();// 让 mfc 出现命令行窗口方便调试AllocConsole(); freopen("CONIN$", "r", stdin); freopen("CONOUT$", "w", stdout);.... 编写代码// 关闭 vld 使用VLDGlobalDisable();
}
关闭程序前,程序会卡死,然后所有的 vld 记录会在 输出(调试)中
vld 使用更多方式:
VLD支持多样化的检测设置接口,具体如下:1. 单一线程的内存泄漏排查1) VLDDisable 禁用当前线程的内存泄漏检测2) VLDEnable 启用当前线程的内存泄漏检测3) VLDRestore 还原当前线程的内存泄漏检测设置到上一个状态利用这个方法,可以做到只检测特定线程的内存泄漏,也可以排除此特定线程的内存泄漏检测。2. 整个程序的内存泄漏排查1) VLDGlobalDisable2) VLDGlobalEnable利用这个方法,可以做到只检测特定阶段的内存泄漏,比如程序启动过程中的内存泄漏,不进行检测,只能当程序初始化完成后,再启动检测。3. 针对特定模块来使用内存泄漏排查1) VLDEnableModule2) VLDDisableModule4. 获取相关的泄漏信息#define VLDReportLeaks() (0) 打印整个程序当前执行此函数前的内存泄漏#define VLDReportThreadLeaks() (0) 打印特定线程在执行此函数前的内存泄漏#define VLDGetLeaksCount() (0) 获取整个程序当前的内存泄漏数量#define VLDGetThreadLeaksCount() (0) 获取指定线程当前的内存泄漏数量#define VLDMarkAllLeaksAsReported() 标记当前的泄漏为已经报告过,后续不再报告#define VLDMarkThreadLeaksAsReported(a) 标记指定线程当前的泄漏为已经报告过,后续不再报告5. 其他高级功能#define VLDRefreshModules() 刷新加载的模块列表,以便针对动态加载的模块进行内存泄漏检查 #define VLDGetOptions() (0) 获取检测的设置 (不太清楚)#define VLDGetReportFilename(a) 获取泄漏报告生成的文件夹名#define VLDSetOptions(a, b, c) 设置检测选项#define VLDSetReportHook(a, b) 自定义的内存泄漏报告回调函数(不清楚)#define VLDSetModulesList(a) 设置要包含或者排除泄漏检测的模块列表#define VLDGetModulesList(a, b) (FALSE) 获取检测中的模块列表#define VLDSetReportOptions(a, b)#define VLDResolveCallstacks() (0)更多信息直接查看官方文档及代码注释。三. 如何避免内存泄漏1. 避免堆内存申请2. 使用智能指针来管理堆内存的申请与释放 这里备份留存,原文链接:https://blog.csdn.net/tragicguy/article/details/54311649
其它:
vld 介绍说支持 2008 — 2015 的vs,但是实际测试中,我使用 vs2017 也是正常使用的
在vs中使用 vld 进行内存泄漏检测相关推荐
- C++中基于Crt的内存泄漏检测
尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询. #ifdef _DEBUG #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FI ...
- qt5使用内存检测工具vld查看内存泄漏
什么是vld? Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具.相比较其它的内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点: 1. 可以得到 ...
- OpenCV中的内存泄漏检测
转自:http://chaishushan.blog.163.com/blog/static/130192897200911685559809/ 内存泄漏时程序开发中经常遇到的问题. 而且出现内存泄漏 ...
- 5 个 Android 开发中比较常见的内存泄漏问题及解决办法
Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的童鞋应该都遇到过,但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢? 在Android程序开发中,当一个对象已经不需要再 ...
- 5种避免C#.NET中因事件造成内存泄漏的技术
原文来自互联网,由长沙DotNET技术社区编译. 5种避免C#.NET中事件造成的内存泄漏的技术 C#(通常是.NET)中的事件注册是内存泄漏的最常见原因.至少从我的经验来看.实际上,我从事件中看到了 ...
- [转载] 解析Java的JNI编程中的对象引用与内存泄漏问题
参考链接: Java对象如何存储在内存中 JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互 ...
- jni jvm 内存泄漏_解析Java的JNI编程中的对象引用与内存泄漏问题
JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互--在 Java 程序中调用 native ...
- VC++6.0中内存泄漏检测 转
最近看了周星星 Blog 中的一篇文章:"VC++6.0中内存泄漏检测",受益匪浅,便运行其例子代码想看看 Output 窗口中的输出结果,可惜怎么弄其输出都不是预期的东西,郁闷了 ...
- 解析Java的JNI编程中的对象引用与内存泄漏问题
JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互--在 Java 程序中调用 native ...
最新文章
- 获取本年、本月、本周时间范围_为什么“增值税期末留抵税额本年累计数”很快就被废止了...
- ACMNO.34 C语言-格式输出 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用6.2f格式输出。
- Ural 1018 (树形DP+背包+优化)
- Twitter-Snowflake,64位自增ID算法详解
- angularJS 自定义元素和属性
- VHDL中的分辨函数
- “约见”面试官系列之常见面试题第三十八篇之js常见的继承方式(建议收藏)
- 报告:5G 网络切片可能会给不法分子留下漏洞!
- Mybatis mapper代理Dao开发
- python下:用 matplotlib.pyplot 显示 Opencv 读取的图像
- java的中文源代码
- 导论II大作业提交-辩论计时器代码
- Dmp文件导入(Imp命令)
- 去除桌面图标蓝底的方法
- Elasticsearch之静态模板
- 【Python从0到1】第三篇:基础语法(三)
- 3维线程格 gpu_GPU的线程模型和内存模型
- 【宝藏级构建桌面应用程序】使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序
- 简单对象协议(SOAP)简介
- DataGrid_单击_双击_editable