说明

使用 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 设置为启动项目。

1.2 设置调试程序

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

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

1.3 设置输出目录

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

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

1.4 拷贝 vld 依赖文件

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

1.5 加断点调试

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

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 版本。

【Visual Leak Detector】源码调试 VLD 库的更多相关文章

  1. 【Visual Leak Detector】源码编译 VLD 库

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记.本篇介绍 VLD 源码的编译.同系列文章目录可见 <内存泄漏检测工具>目录 目录 说明 1. VLD 库的依赖文件 2. 源码 ...

  2. 【Visual Leak Detector】QT 中 VLD 输出解析(二)

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 有一处内存泄漏时的输出报告(int 型) 3. 有一处内存泄漏时的输出报告(int 数组型) 1. 使 ...

  3. 【Visual Leak Detector】QT 中 VLD 输出解析(一)

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 无内存泄漏时的输出报告 1. 使用方式 在 QT 中使用 VLD 的方法可以查看另外几篇博客: [Vi ...

  4. 【Visual Leak Detector】QT 中 VLD 输出解析(四)

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 测试代码 3. 使用 32 bit 编译器时的输出 4. 使用 64 bit 编译器时的输出 5. 输 ...

  5. Visual Leak Detector 2.2.3 Visual C++内存检测工具

      Visual Leak Detector是一款免费的.健全的.开源的Visual C++内存泄露检测系统.相比Visual C++自带的内存检测机制,Visual Leak Detector可以显 ...

  6. 使用Visual Leak Detector for Visual C++ 捕捉内存泄露

    什么是内存泄漏? 内存泄漏(memory leak),指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段 ...

  7. Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

    那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...

  8. Cocos性能优化工具的开发介绍Visual Studio内存泄漏检测工具——Visual Leak Detector

    然后,Windows下有什么好的内存泄漏检測工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检測功能.我们能够使用第三方工具Visual Leak Detector(下面简 ...

  9. VisualStudio 怎么使用Visual Leak Detector

    VisualStudio 怎么使用Visual Leak Detector 那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测 ...

  10. 【Visual Leak Detector】核心源码剖析(VLD 1.0)

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记.本篇对 VLD 1.0 源码做内存泄漏检测的思路进行剖析.同系列文章目录可见 <内存泄漏检测工具>目录 目录 说明 1. 源码 ...

随机推荐

  1. 2022安洵杯pwn-babyarm

    首先就是绕过一个简单的变表base64的加密key 然后就是一个类似ret2libc的利用方式,不过没有直接控制r0的gadget 使用的是arm32中万能的gadget from pwn impor ...

  2. DataX Web可视化分布式调度数据同步系统

    因项目需要,结合目前参与的项目,以及个人技术能力范围,组合研发一套web可视化数据同步系统,正式名称:DataXP. 项目背景:接触过阿里云这类大数据平台,对于中大型项目以及需要与外部系统对接数据的情 ...

  3. vue项目怎么链接开发服务器

    在前后端分离的前提下,完成前端的页面开发,就可以开始链接开发服务器 安装axios到项目中 npm install axios --save 安装完成后问你的后端开发人员要IP 后端会给一个IP以及端 ...

  4. Python学习笔记-argparse模块

    Python学习笔记-argparse模块 optparseargparse 昨天学习了一个简单的端口扫描器的脚本,其中涉及到了optparse模块,网上关于此模块的介绍已有很多,但这个模块已经不更新 ...

  5. 【LuckyFrame研究】下载安装包

    下载安装包,可以快速部署 百度网盘链接: https://pan.baidu.com/s/1SNUhzoKFgH2TRQN2Rx711A   提取码: u845 服务端压缩包 V3.X版本:Lucky ...

  6. 验证码案例的实现---MyBatis+Session+Cookie

    展示验证码(jsp页面) 首先,我们需要自己利用BufferedImage类去生成一张可以变换的验证码图片: 之后,我们就可以利用这样一串代码去将验证码里面的内容获取到: 这是一串测试代码: Outp ...

  7. BGF bivariate generating function 双变量生成函数

    目录 定义 BGF bivariate generating function horizonal GF 和 vertical GF 例子 组合数 horizonal GF vertical GF ( ...

  8. 实现一个CRDT工具库——PSet

    PSet 这段代码实现了一个PSet,即Positive Set,是GSet的扩展.PSet是一个集合,支持添加和删除元素,但是不支持重复元素.PSet的实现是通过两个GSet来实现的,一个GSet存 ...

  9. 2020寒假学习笔记13------Python基础语法学习(二)

    同一运算符   同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址. 运算符 描述 is is 是判断两个标识符是不是引用同一个对象 is not is  not 是判断两个标识符是不是引用 ...

  10. 微软博客上几篇 Semantic-kernel (SK)文章

    自从最近微软开源Semantic-kernel  来帮助开发人员在其应用程序中使用AI大型语言模型(LLM)以来,Microsoft一直在忙于改进它,发布了有关如何使用它的新指南并发布了5篇文章介绍他 ...