【Visual Leak Detector】在 VS 高版本中使用 VLD

yizhihongxing

说明

使用 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日

相关文章

  • 从0开始学习c++

    常量指针与指针常量 #include<iostream> using namespace std; int main() { int a = 10; int b = 20; // 常量指针与指针常量 // 1.常量指针 const修饰指针 指针的指向是可以修改的(指针变量中存的地址值可以修改) 指针指向的值不能改(不能通过解引用的形式修改地址中存…

    C++ 2023年4月24日
    00
  • Linux/Ubuntu系统下使用VS Code配置C/C++开发环境

        在Ubuntu下,使用VS Code来编辑代码或进行开发非常方便,下面记录一下如何配置gcc/g++编译器和GDB调试工具。 准备工作: 1. 安装VS Code,过程略。 2. 为VS Code安装C/C++ Extension Pack 扩展组件,其他插件会附带安装 3. Ubuntu系统自带g++和gdb,查看一下 配置环境: VS Code …

    C++ 2023年5月7日
    00
  • 非常可乐

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

    C++ 2023年4月27日
    00
  • 第一部分:介绍 Spdlog 日志库

    什么是 Spdlog 日志库 Spdlog 是一个 C++ 的日志库,它具有高效、易用、跨平台等特点。它可以写入到控制台、文件等输出目标,支持多种日志级别、多线程安全等功能,非常适合在 C++ 项目中使用。 Spdlog 日志库的历史和背景 Spdlog 日志库最初由 Gabi Melman 开发,它最初是为了解决 C++ 中的日志记录问题而创建的。在很长一…

    C++ 2023年4月18日
    00
  • 网络流的C++代码实现与过程讲解

    网络流是一种非常重要的图论算法,它在许多实际问题中得到广泛应用。本文将介绍网络流算法的C++代码实现与过程讲解。 算法概述 网络流算法是通过将图中的边看作流量通道,将图的点看作流量的起点或终点,来求解图中的最大或最小流量的问题。它是一种非常重要的最优化算法,广泛应用于图论、运筹学、计算机网络等领域。 网络流算法有很多种,其中最著名的是Ford-Fulkers…

    C++ 2023年4月22日
    00
  • C++文件处理

    ? 新建文件 //这是要操作的文件名称 string str_filename = “E:/data/t/haha.txt”; //创建一个流对象 o 就是从这个流对象出去, 出到哪里, 当然是我们要建立的文件 ofstream ofs; //out会覆盖 ofs.open(str_filename, ios::out); ofs << “我创建…

    C++ 2023年4月17日
    00
  • C++冒泡排序简单讲解

    什么是冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢”浮”到数列的顶端。(这段话引用自菜鸟教程) 冒泡排序的基本思想 重复地走访要…

    C++ 2023年4月19日
    00
  • 聊一聊 Valgrind 监视非托管内存泄露和崩溃

    一:背景 1. 讲故事 只要是程序总会出现各种莫名其妙的问题,比如:非托管内存泄露,程序崩溃,在 Windows 平台上一般用微软自家的官方工具 App Verifier 就可以洞察,那问题出在 Linux 上怎么办呢?由于 Linux 崇尚自由,需要在各种牛鬼蛇神写的非官方开源软件中寻找一个比较靠谱的,比如本篇所说的 Valgrind。 个人感觉 Valg…

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