【Visual Leak Detector】在 VS 高版本中使用 VLD
说明
使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。 本篇介绍如何在 VS 高版本中使用 vld2.5.1。同系列文章目录可见 《内存泄漏检测工具》目录
1. 使用前的准备
参考本人另一篇博客 安装 Visual Leak Detector 下载 vld-2.5.1-setup.exe 并按步骤安装 VLD。注意配置环境的时候一定要把三个选项都打上勾,在一台电脑上配置完成后,用的时候十分方便,包含头文件就可以使用,不需添加任何多余的代码。
2. 在 VS 2015 及更早版本中使用 VLD
可以在 Using-Visual-Leak-Detector 官方文档里看到如何使用 VLD,里面介绍了如何在 Visual C++ 2003/2005/2008/2010/2012/2013 中配置 VLD 的环境、如何使用 VLD。在 VS 2015 中使用 VLD 的方法,可参考本人另一篇博客 在 VS 2015 中使用 VLD。
3. 在 VS 高版本中使用 VLD
v2.5.1 默认只支持到 VS 2015,其使用的 dbghelp.dll 版本为 6.11.1.404。若要在高版本的 Visual Studio 里面使用 VLD ,且想完全使用高版本的开发环境,可以先尝试按 VS2015 的用法来,当出现崩溃、闪退、无法检测已知泄漏等情况时,再考虑修改 VLD 的源码。由于目前本人对此需求不大,所以仅说下个人思路,供日后参考。具体来说,需要解决以下问题:
- 源码里面有些宏的用法,限制了能编译
VLD的VS版本,例如_MSC_VER宏(详见 vld.cpp 第 975~977 行),需要修改,可参考 MSDN - predefined-macros。 - 高版本的
MFC/CRT/COM等底层DLL若有新的内存分配/释放函数,则需要把这些函数也添加到IAT hook的目标函数里面,详见 dllspatches.cpp 与 vld_hooks.cpp。 - 有些函数在高版本中进行了更新,原先的逻辑在新版本中不适用,典型的如
dbghelp.dll库的SymInitialize()函数(详见 vld.cpp 第 483 行), 这个函数在10.0版本的dbghelp.dll中的行为不同于6.11,导致在VS2019/VS2022中使用VLD时可能出现闪退,参考 GitHub-KindDragon-Vld-Issue#86。
3.1 参考资料:在 VS 2017 中使用 VLD
如下,点击可跳转。
- 博客园 - VS2017 编译使用 VLD,这篇文章写了如何用
VS 2017编译VLD,并对源码进行了一些修改,然后在同版本的VS项目中使用 。 - 博客园 - 在 VS2017 中使用 VLD,这篇文章写了如何在
VS 2017中直接使用VLD 2.5.1库,无任何源码修改。 - MSDN - What happened to vld,这篇文章介绍了如何在
VS 2017中直接使用VLD 2.5.1库,无任何源码修改,但会替换默认的dbghelp.dll文件。
3.2 参考资料:在 VS 2019 中使用 VLD
如下,点击可跳转。
- GitHub-razor950-vld,修改过的
VLD,介绍说支持2017/2019,参考 GitHub-KindDragon-Vld-Issue#75。 - GitHub-Azure-vld,修改过的
VLD,更新日志 说支持到2019,参考 StackOverflow-how-to-install-visual-leak-detector-vld-on-visual-studio-2019。 - GitHub-oneiric-vld,修改过的
VLD,介绍说支持2019,参考 GitHub-KindDragon-Vld-Issue#65。 - CSDN - VS2019 编译 VLD,这篇文章写了如何用
VS 2019编译VLD,并对源码进行了一处修改,然后在同版本的VS项目中使用 。
3.3 参考资料:在 VS 2022 中使用 VLD
如下,点击可跳转。
- GitHub-hongxinGuo-vld,修改过的
VLD,介绍说支持2008~2022,参考 GitHub-KindDragon-Vld-Issue#85。
【Visual Leak Detector】在 VS 高版本中使用 VLD的更多相关文章
- 【Visual Leak Detector】核心源码剖析(VLD 1.0)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记.本篇对 VLD 1.0 源码做内存泄漏检测的思路进行剖析.同系列文章目录可见 <内存泄漏检测工具>目录 目录 说明 1. 源码 ...
- VS2017 编译 Visual Leak Detector + VLD 使用示例
起因 一个Qt5+VS2017的工程,需要进行串口操作,在自动时发现一段时间软件崩溃了,没有保存log,在 debug 的时候发现每运行一次应用占据的内存就多一点,后来意识到是内存泄漏了.这个真是头疼 ...
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector
那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...
- 【Visual Leak Detector】在 QT 中使用 VLD(方式二)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用前的准备 2. 在 QT 中使用 VLD 2.1 在项目 .pro 文件中指明路径 2.2 在 main.cpp ...
- 【Visual Leak Detector】在 QT 中使用 VLD(方式三)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用前的准备 2. 在 QT 中使用 VLD 2.1 复制 lib 库及头文件 2.2 在项目 .pro 文件中指明路 ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(一)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 无内存泄漏时的输出报告 1. 使用方式 在 QT 中使用 VLD 的方法可以查看另外几篇博客: [Vi ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(二)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 有一处内存泄漏时的输出报告(int 型) 3. 有一处内存泄漏时的输出报告(int 数组型) 1. 使 ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(四)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 测试代码 3. 使用 32 bit 编译器时的输出 4. 使用 64 bit 编译器时的输出 5. 输 ...
- 使用Visual Leak Detector检测内存泄漏[转]
1.初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题 ...
- vld(Visual Leak Detector) 内存泄露检测工具
初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复 杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题.内存 ...
随机推荐
- 实验1.SDN拓扑实践
实验1:SDN拓扑实践 一.基本要求 (一)Mininet运行结果截图 (二) 使用Mininet的命令行生成如下拓扑: 1. 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线. 2. 3台 ...
- POI给单元格添加超链接(xls,xlsx)
package com.topcheer.html; import java.io.FileOutputStream; import java.io.IOException; import org.a ...
- 一个关于 Linux环境下输出操作符 >和>>的问题
[>和>>的区别]命令>文件,表示以覆盖的方式,把命令正确输出到指定的文件或者设备当中:命令>>文件,表示以追加的方式,把命令正确输出到指定的文件或者设备当中. [ ...
- 详解数仓中sequence的应用场景及优化
摘要:本文简单介绍sequence的使用场景及如何修改sequence的cache值提高性能. 本文分享自华为云社区<GaussDB(DWS)关于sequence的那些事>,作者:Arro ...
- 11.8 消除闪烁(2)(harib08h)
ps:看书比较急,有错误的地方欢迎指正,不细致的地方我会持续的修改 11.8 消除闪烁(2)(harib08h) 11.7 消除闪烁(1)(harib08g)存在的问题: 鼠标放在计时器上会有 闪烁, ...
- Linux & 标准C语言学习 <DAY13>
一.字符串 字符:类字形单位或符号,包括字母.数字.运算符号.标点符号和其他符号,以及一些功能性符号 串:是一种数据结构,存储类型相同的若干个数据,对于串型结构的处理是批量性的,会从头 ...
- 工良出品:包教会,Hadoop、Hive 搭建部署简易教程
目录 导读 Hadoop.Hive 是什么 运行环境 Java 环境 Mysql 下载 Hadoop.Hive 和 驱动 安装 Hadoop core-site.xml hdfs-site.xml m ...
- Java面试——TCP与HTTP
更多内容,移步 IT-BLOG 一.Session 和 Cookie 的区别 [1]Cookie 保存在客户端,未设置存储时间的 Cookie,关闭浏览器会话 Cookie 就会被删除:设置了存储时间 ...
- 一个bug重温对JRE和JDK的关系思考
前几天做一个springboot项目时,导入的JAVA版本是17,然后后面想更贴近下企业中使用的JDK版本就改成了JDK 1,8,然后就编译错误,bug如下 java: java.lang.Unsup ...
- 手机号码归属地的自动查询.py(亲测有效)
import requests url = "http://m.ip138.com/sj.asp?mobile=" kv = {'user-agent':'Mozilla/5.0' ...