【Visual Leak Detector】在 VS 高版本中使用 VLD - 木三百川
source link: https://www.cnblogs.com/young520/p/17375599.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
使用 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
如下,点击可跳转。
3.3 参考资料:在 VS 2022 中使用 VLD
如下,点击可跳转。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK