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

  • 源码里面有些宏的用法,限制了能编译 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

如下,点击可跳转。

原文链接:https://www.cnblogs.com/young520/p/17375599.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【Visual Leak Detector】在 VS 高版本中使用 VLD - Python技术站

(0)
上一篇 2023年5月6日
下一篇 2023年5月7日

相关文章

  • LeetCode 力扣 205. 同构字符串

    给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。 示例 1: 输入:s = “egg”, t = “add”输出:true示例…

    C++ 2023年4月18日
    00
  • 08、【算例】openfoam溃坝

    7.1 溃坝 官网目录:$FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreak 7.1.1 介绍 本案例使用interFoam两相算法,基于流体体积分数(VOF)法,每个网格中的相体积分数(alpha)通过求解一个组分运输方程确定。物理属性基于这个相分数通过加权平均计算。 7.1.2 网格生成 blockM…

    C++ 2023年4月18日
    00
  • C++的引用变量作为函数参数

    一、问题引入 在C++的中新增一个特性:按引用传递变量,虽然与按传递变量的地址可以实现相同的结果,但引用有其独特的地方。 引用传递: 引用经常被用作函数参数,使得函数中的变量名成为调用程序中的变量的别名。 通过引用变量用作参数,函数将使用原始数据,而不是其副本。 二、解决过程 举例说明: #include <iostream> using nam…

    C++ 2023年4月17日
    00
  • C++重载的奥义之运算符重载

    0、引言         重载,顾名思义从字面上理解就是重复装载,打一个不恰当的比方,你可以用一个篮子装蔬菜,也可以装水果或者其它,使用的是同一个篮子,但是可以用篮子重复装载的东西不一样。         正如在之前的文章《重载的奥义之函数重载》中介绍的类似,函数的重载是指利用相同的函数名设计一系列功能相近,但是功能细节不一样的函数接口;因此运算符重载也是指…

    C++ 2023年4月18日
    00
  • 面试最常问的数组转树,树转数组 c++ web框架paozhu实现

    刚毕业同学,找工作常被问 二维数组转树,树转二维数组 需要支持无限层级实现,如果你了解这个语言那么实现起来还要一番思考 c++ web框架 paozhu使用 需要实现数据库表数据到前台菜单实现,就是这种功能 二维数组转树,树转二维数组 保存时候树二维数组,展示时候树树状。 这个技术难点在于无限递归,这个树程序基本原理 现在看看c++怎么实现的,无限递归,家肯…

    C++ 2023年4月25日
    00
  • 二分查找算法讲解及其C++代码实现

    二分查找算法是一种常用的查找算法,也被称为折半查找。它可以在有序的数组或列表中快速查找需要的元素。 算法描述: 首先确定数组的中间位置mid=(left+right)/2; 然后将要查找的值key与中间位置的值进行比较; 如果key等于中间位置的值,则查找成功,返回mid; 如果key小于中间位置的值,则在左半部分继续查找; 如果key大于中间位置的值,则在…

    C++ 2023年4月30日
    00
  • 2023团队天梯模拟赛 L2-3 智能护理中心统计 and L3-1 塔防游戏(23分)

    L2-3 智能护理中心统计 智能护理中心系统将辖下的护理点分属若干个大区,例如华东区、华北区等;每个大区又分若干个省来进行管理;省又分市,等等。我们将所有这些有管理或护理功能的单位称为“管理结点”。现在已知每位老人由唯一的一个管理结点负责,每个管理结点属于唯一的上级管理结点管辖。你需要实现一个功能,来统计任何一个管理结点所负责照看的老人的数量。 注意这是一个…

    C++ 2023年4月19日
    00
  • 非常可乐

    题目描述 大家一定觉得运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为\(S (S < 101)\)毫升 (正好装满一瓶) ,它们三个之间可…

    C++ 2023年4月27日
    00
合作推广
合作推广
分享本页
返回顶部