0

【Visual Leak Detector】在 VS 高版本中使用 VLD - 木三百川

 1 year ago
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.
neoserver,ios ssh client

使用 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 的源码。由于目前本人对此需求不大,所以仅说下个人思路,供日后参考。具体来说,需要解决以下问题:

  • 源码里面有些宏的用法,限制了能编译 VLDVS 版本,例如 _MSC_VER 宏(详见 vld.cpp 第 975~977 行),需要修改,可参考 MSDN - predefined-macros
  • 高版本的 MFC/CRT/COM 等底层 DLL 若有新的内存分配/释放函数,则需要把这些函数也添加到 IAT hook 的目标函数里面,详见 dllspatches.cppvld_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

如下,点击可跳转。

3.2 参考资料:在 VS 2019 中使用 VLD

如下,点击可跳转。

3.3 参考资料:在 VS 2022 中使用 VLD

如下,点击可跳转。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK