【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. 源码 ...
随机推荐
- vue input有值但还是验证不通过
验证失败原因: 因为input自动把输入的值转换为string类型,导致验证失败. 解决方案: 一. Input中的v-model改为v-model.number: 二.rules里面需要加type: ...
- Safari 浏览器下打印PDF, 打印预览显示为空白
重现代码 const iframe = document.createElement('iframe'); iframe.onload = () => { iframe.focus(); ifr ...
- CH573 CH582 CH579蓝牙从机(peripheral)例程讲解三(蓝牙服务修改)
修改服务需要对蓝牙比较熟悉的工程师去完成,否则在例程功能满足自己需求时,不建议修改,很容易改错,下面就简单介绍下如何在别的char添加一个nofify属性. step1: 给Simple Profil ...
- ArcEngine创建注记类及生成注记要素
在宗地出图的时候遇到此功能要求,看代码 ※创建注记类 public void createBlackAnno(IMap pMap) { //创建mdb数据库文件 IWorkspaceFactory p ...
- Python第九章实验报告
一.实验对象:<零基础学Python>第九章异常处理及程序调试的实例 二.实验环境:IDLE Shell 3.9.7 三.实验目的:了解和掌握常用的异常处理语句 四.实验过程: 实例01 ...
- What Are You Weighting For?
A basic strength routine can change your life Strength training isn't just about getting six-pack ab ...
- IPAD做电脑的绘图板
方法:Microsoft远程桌面 即 RD CLIENT
- 【单元测试】Junit 4(八)--junit4 内置Rule
1.0 Rules Rules允许非常灵活地添加或重新定义一个测试类中每个测试方法的行为.测试人员可以重复使用或扩展下面提供的Rules之一,或编写自己的Rules. 1.1 TestName ...
- 王树森Transformer学习笔记
目录 Transformer Attention结构 Self-Attention结构 Multi-head Self-Attention BERT:Bidirectional Encoder Rep ...
- MySQL 数据库死锁问题
在分析案例之前,我们先了解一下MySQL INNODB.在MySQL INNODB引擎中主键是采用聚簇索引的形式,即在B树的叶子节点中既存储了索引值也存储了数据记录,即数据记录和主键索引是存在一起的. ...