【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. 源码 ...
随机推荐
- redis基础-redis事务
学习总结 原文:https://juejin.im/post/5d29ac845188252cc75e2d5c redis事务: redis是否有事务? redis是有事务的.命令如下: Redis事 ...
- Arrays.asList()需要注意的点
千万不要这样使用Arrays.asList ! 测试的几种情况及原因: public static void main(String[] args) { //第一种基本类型数组 int[] arr = ...
- cider 二面
cider 二面 1.祖传自我介绍 2.当前BLF外卖业务缺点是什么? 产品单一 : 跟竞品比较起来,产品单一导致用户流量很少 3.QLExpress二次开发的原因 流程对接 提升性能 后台对接 4. ...
- MyCat中间件的坑
首先说一下为什么选择MyCat,mysql分表分库的工具还有sharding-jdbc,是jar包的形式集成到项目的,可以相对灵活的配置自定义分片策略(PS:其实大部分业务场景是分片策略越简单越好啊, ...
- Pinia使用技巧
vue2使用的vuex,是一个状态管理器,现在vue3出了最新的pinia,今年偿试一下. 首先是安装,这里要注意一下,有一个持久化插件,如果不用的话,页面一刷新,状态会消失. npm install ...
- https加固,https://ip暴露后端IP。
增加server配置server { listen 443 default_server; server_name _ ; ssl on; ssl_certificate test.crt 随便设置一 ...
- 关于两行代码让我时间无限拉长这件事------mainServlet
在再一次尝试实现增删改查的功能时,出现了一些BUG,修改功能一直实现不了,查了好久的资料,这才发现问题 如上图所示,这个Servlet里面定义的方法,虽然很短,但是重要的很奥,改了好久都没注意到这个问 ...
- Linux & 标准C语言学习 <DAY13>
一.字符串 字符:类字形单位或符号,包括字母.数字.运算符号.标点符号和其他符号,以及一些功能性符号 串:是一种数据结构,存储类型相同的若干个数据,对于串型结构的处理是批量性的,会从头 ...
- PGF 概率生成函数 Probability generating function
Probability Mass Function 离散随机变量的分布函数PMF 目录 随机结构举例 two classical combinatorial distributions PGF Pro ...
- webpack原理(1):Webpack热更新实现原理代码分析
热更新,主要就是把前端工程 文件变更,即时编译,然后通知到浏览器端,刷新代码. 服务单与客户端通信方式有:ajax 轮询,EventSource.websockt. 客户端刷新一般分为两种: 整体页面 ...