【Visual Leak Detector】源码调试 VLD 库

说明

使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 源码的调试。同系列文章目录可见 《内存泄漏检测工具》目录

1. VLD 库源码调试步骤

vld2.5.1 版本为例,下载源码 后,源码包中各文件的用途可看本人另一篇博客 【VLD】源码文件概览。使用 VLD 进行泄漏检测时,有时候会出现突然崩溃、退出时没有打印以下提示信息等情况,此时就可以调试一下 VLD 的源码,查一查是哪里出了问题。

Visual Leak Detector is now exiting.

与其他 DLL 的调试方法一样,VLD 源码调试遵循以下步骤(参考 MSDN - how-to-debug-from-a-dll-project)。

1.1 设置为启动项目

使用 VS2015 打开 vld_vs14.sln,将 vld 设置为启动项目。

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

1.2 设置调试程序

进入 vld 属性页 -> 配置属性 -> 调试 页面。选择 Debug 模式,选择 本地 Windows 调试器,根据自己需求设置调试程序与调试程序的启动参数。点击确定。

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

这个 命令 就是指调用 vld.dll 的程序(被称为调试程序)所在路径,我的是 E:\Cworkspace\VSDemo\testVLD\Debug\testVLD.exe,如果这个调试程序需要额外的参数,就把参数填写在下一行 命令参数 中,没有参数空着就好。

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

1.3 设置输出目录

进入 vld 属性页 -> 配置属性 -> 常规 页面。选择 Debug 模式,根据自己需求设置输出目录。点击确定。

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

设置为调试程序的同一级目录,我的是 E:\Cworkspace\VSDemo\testVLD\Debug,由于 vld_vs14.sln 的路径为 E:\Cworkspace\VSDemo\vld-master,因此这里显示为相对路径。

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

1.4 拷贝 vld 依赖文件

vld 安装目录中的 dbghelp.dllMicrosoft.DTfW.DHL.manifest 这两个文件拷贝至调试程序的同一级目录,我的是 E:\Cworkspace\VSDemo\testVLD\Debug,要注意是 Win32 还是 x64,拷对应的才行。

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

1.5 加断点调试

至此,就可以开始调试了,不妨在 VisualLeakDetector 类的构造函数中加一个断点,点击 本地 Windows 调试器 开始调试(或者按 F5),程序成功停在了断点处。

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

2. 注意事项

调试时,有以下几点需注意:

  • vld 源码生成的 vld.dll 与调试程序所引用的 vld.dll 必须是同一路径下的同一个文件,这也是要重新设置 vld 输出目录的原因。为确保调试程序运行时能正确找到 vld 生成的 dll,可以将 vld 输出目录设置为调试程序所在目录,或者Path 环境变量的某个目录(例如 vld 安装目录的 bin 子目录下)
  • vld 的依赖文件 dbghelp.dllMicrosoft.DTfW.DHL.manifest 也应该放在调试程序能找到的地方。
  • 平台位数必须一致,Win32 时都必须得是 Win32x64 时都必须得是 x64
  • 调试程序必须能找到它所依赖的其他环境(比如 xx.dll)。特别是 QT 开发的调试程序,其依赖的 Qt DLL 比较多,直接运行时会提示缺失某某 DLL
  • 调试程序与 DLL 都必须是 Debug 版本。

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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【Visual Leak Detector】源码调试 VLD 库 - Python技术站

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

相关文章

  • Qt-FFmpeg开发-音频解码为PCM文件(9)

    音视频/FFmpeg #Qt Qt-FFmpeg开发-使用libavcodec API的音频解码示例(MP3转pcm) 目录 音视频/FFmpeg #Qt Qt-FFmpeg开发-使用libavcodec API的音频解码示例(MP3转pcm) 1、概述 2、实现效果 3、主要代码 4、完整源代码 更多精彩内容 ?个人内容分类汇总 ? ?音视频开发 ? 1、…

    C++ 2023年4月17日
    00
  • 【Visual Leak Detector】VS 中 VLD 输出解析

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 使用方式 2. 输出报告 1. 使用方式 在 VS 中使用 VLD 的方法可以查看另外一篇博客:在 VS 2015 中使用 VLD。 2. 输出报告 在 VS 中使用 VLD 时的输出报告,与在 QT 中使用时是一致的,输出内容的解析…

    C++ 2023年4月17日
    00
  • LeetCode 力扣 205. 同构字符串

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

    C++ 2023年4月18日
    00
  • day3 函数的定义和调用,练习编写简单的程序(记录1)

    一、函数的定义 可以分为以下两种: 1、函数声明和函数定义分离 这种方法将函数声明和函数定义分开,通常在头文件中先声明函数原型,然后在源文件中实现函数定义。 例如,头文件 example.h 中声明了一个函数 add: #ifndef EXAMPLE_H #define EXAMPLE_H int add(int a, int b); // 声明函数原型 #…

    C++ 2023年4月18日
    00
  • P6818 [PA2013]Działka 题解

    P6818 [PA2013]Działka 前言 我太菜了。。。。 对着 jiangly 大佬的题解研究了一下午研究了一下午才搞出来(泪目。 作为一个蒟蒻,我就详细的讲一下我对与本题的理解。 题意 本题的的题意描述的还是比较明了。 在二维坐标系中,输入 \(n\) 个点 \(m\) 次询问, 每次询问,给出一个矩阵, 求出矩阵内极大凸包的面积。 题解 1.如…

    C++ 2023年4月30日
    00
  • 前缀和

      一、什么是前缀和 前缀和是一种预处理,用于降低查询时的时间复杂度。 举个例子:给定 n 个整数,然后进行 m 次询问,每次询问求一个区间内值的和。 如果用暴力写法,那每次询问都需要从区间左端点循环到区间右端点求和,时间复杂度较大。 这种时候就可以预先求出该数组的一维前缀和。 则 ans=s[R]-s[L-1] ,其中 L 和 R 是给定的区间。每次询问可…

    C++ 2023年4月17日
    00
  • 13、c++使用单例模式实现命名空间函数

    本案例实现一个test命名空间,此命名空间内有两个函数,分别为getName()和getNameSpace(); 声明命名空间及函数 namespace test{ const std::string& getName()和(); const std::string& getNameSpace(); } 命名空间内实现单例类 实现一个单例类,…

    C++ 2023年4月24日
    00
  • C++的对象和类

    一、问题引入 区分面向过程编程和面向对象编程的最大的特性就是 类,类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。 那么如何声明类、定义类、调用类? 以 C++ Primer Plus:中文版 (第六版) 的股票类举例说明。 二、解决过程 2-1 类抽象 股票类的抽象化 获得股票 增持股票 卖出股票 更新股票价格…

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