【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
设置为启动项目。
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.dll
与 Microsoft.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.dll
与Microsoft.DTfW.DHL.manifest
也应该放在调试程序能找到的地方。- 平台位数必须一致,
Win32
时都必须得是Win32
,x64
时都必须得是x64
。 - 调试程序必须能找到它所依赖的其他环境(比如
xx.dll
)。特别是 QT 开发的调试程序,其依赖的Qt DLL
比较多,直接运行时会提示缺失某某DLL
。 - 调试程序与
DLL
都必须是Debug
版本。
【Visual Leak Detector】源码调试 VLD 库的更多相关文章
- 【Visual Leak Detector】源码编译 VLD 库
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记.本篇介绍 VLD 源码的编译.同系列文章目录可见 <内存泄漏检测工具>目录 目录 说明 1. VLD 库的依赖文件 2. 源码 ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(二)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 有一处内存泄漏时的输出报告(int 型) 3. 有一处内存泄漏时的输出报告(int 数组型) 1. 使 ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(一)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 无内存泄漏时的输出报告 1. 使用方式 在 QT 中使用 VLD 的方法可以查看另外几篇博客: [Vi ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(四)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 测试代码 3. 使用 32 bit 编译器时的输出 4. 使用 64 bit 编译器时的输出 5. 输 ...
- Visual Leak Detector 2.2.3 Visual C++内存检测工具
Visual Leak Detector是一款免费的.健全的.开源的Visual C++内存泄露检测系统.相比Visual C++自带的内存检测机制,Visual Leak Detector可以显 ...
- 使用Visual Leak Detector for Visual C++ 捕捉内存泄露
什么是内存泄漏? 内存泄漏(memory leak),指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段 ...
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector
那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...
- Cocos性能优化工具的开发介绍Visual Studio内存泄漏检测工具——Visual Leak Detector
然后,Windows下有什么好的内存泄漏检測工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检測功能.我们能够使用第三方工具Visual Leak Detector(下面简 ...
- VisualStudio 怎么使用Visual Leak Detector
VisualStudio 怎么使用Visual Leak Detector 那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测 ...
- 【Visual Leak Detector】核心源码剖析(VLD 1.0)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记.本篇对 VLD 1.0 源码做内存泄漏检测的思路进行剖析.同系列文章目录可见 <内存泄漏检测工具>目录 目录 说明 1. 源码 ...
随机推荐
- 2022安洵杯pwn-babyarm
首先就是绕过一个简单的变表base64的加密key 然后就是一个类似ret2libc的利用方式,不过没有直接控制r0的gadget 使用的是arm32中万能的gadget from pwn impor ...
- DataX Web可视化分布式调度数据同步系统
因项目需要,结合目前参与的项目,以及个人技术能力范围,组合研发一套web可视化数据同步系统,正式名称:DataXP. 项目背景:接触过阿里云这类大数据平台,对于中大型项目以及需要与外部系统对接数据的情 ...
- vue项目怎么链接开发服务器
在前后端分离的前提下,完成前端的页面开发,就可以开始链接开发服务器 安装axios到项目中 npm install axios --save 安装完成后问你的后端开发人员要IP 后端会给一个IP以及端 ...
- Python学习笔记-argparse模块
Python学习笔记-argparse模块 optparseargparse 昨天学习了一个简单的端口扫描器的脚本,其中涉及到了optparse模块,网上关于此模块的介绍已有很多,但这个模块已经不更新 ...
- 【LuckyFrame研究】下载安装包
下载安装包,可以快速部署 百度网盘链接: https://pan.baidu.com/s/1SNUhzoKFgH2TRQN2Rx711A 提取码: u845 服务端压缩包 V3.X版本:Lucky ...
- 验证码案例的实现---MyBatis+Session+Cookie
展示验证码(jsp页面) 首先,我们需要自己利用BufferedImage类去生成一张可以变换的验证码图片: 之后,我们就可以利用这样一串代码去将验证码里面的内容获取到: 这是一串测试代码: Outp ...
- BGF bivariate generating function 双变量生成函数
目录 定义 BGF bivariate generating function horizonal GF 和 vertical GF 例子 组合数 horizonal GF vertical GF ( ...
- 实现一个CRDT工具库——PSet
PSet 这段代码实现了一个PSet,即Positive Set,是GSet的扩展.PSet是一个集合,支持添加和删除元素,但是不支持重复元素.PSet的实现是通过两个GSet来实现的,一个GSet存 ...
- 2020寒假学习笔记13------Python基础语法学习(二)
同一运算符 同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址. 运算符 描述 is is 是判断两个标识符是不是引用同一个对象 is not is not 是判断两个标识符是不是引用 ...
- 微软博客上几篇 Semantic-kernel (SK)文章
自从最近微软开源Semantic-kernel 来帮助开发人员在其应用程序中使用AI大型语言模型(LLM)以来,Microsoft一直在忙于改进它,发布了有关如何使用它的新指南并发布了5篇文章介绍他 ...