说明

使用 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. 3.javaweb-servlet

    1. 设置编码 tomcat8之前,设置编码: 1)get请求方式: //get方式目前不需要设置编码(基于tomcat8) //如果是get请求发送的中文数据,转码稍微有点麻烦(tomcat8之前) ...

  2. python中的反射机制

    转自https://www.cnblogs.com/renjie1105/p/15909285.html python反射简介 在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需 ...

  3. 不使用setTimeout的延迟执行

    function sleep(ms){ var time = new Date(); time.setTime(time.getTime() + ms); while(new Date().getTi ...

  4. 安装了lrzsz ,使用时,还是提示找不到

    安装了lrzsz ,使用时,还是提示找不到

  5. OO多项式求导作业总结

    一.程序分析 1.1第一次作业 第一次作业是简单的多项式求导,甚至没有括号嵌套.但是,就是这个在如今看来如此简单的作业,由于俺寒假过于起飞,pre没做,正则表达式也不会(属实拉跨),一度想用c语言字符 ...

  6. odoo 权限管理学习总结

    环境 odoo-14.0.post20221212.tar base_user_role-12.0.2.1.2.zip 下载地址: https://apps.odoo.com/apps/modules ...

  7. 项目构建node-sass源码报错 SyntaxError:Unexpectedtoken"?"

    背景 vue2项目,之前一直构建正常.今天改了代码,构建时报错,报错原因显示编译node-sass源码时出错. 报错信息: Modulebuild failed:/node_modules/node- ...

  8. 音频和视频流最佳选择?SRT 协议解析及报文识别

    我们所知道 SRT 是由 Haivision 和 Wowza 开发的开源视频流协议.很多人会认为在不久的将来,它被是 RTMP 的替代品.因为 RTMP 协议安全性稍低,延迟相对较高 ,而相对于 SR ...

  9. 关于 manacher 的一个小细节

    在该算法中,我们需要用到一个数组 hw[i] ,代表 i 的最大回文半径.而且这个半径不包括 i 本身(若串为 ccc 则 hw 为 1). 这时最终答案为最大的 hw 减一. 为什么要减一呢?最终的 ...

  10. ZIP64压缩扩展的兼容性问题

    一.ZIP压缩的两种规范 zip64 格式是标准 zip 格式的扩展,实际上消除了 zip 存档中文件大小和数量的限制. 每种格式允许的最大值总结如下: Standard Format Zip64 F ...