【Visual Leak Detector】源码调试 VLD 库

使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 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 设置为启动项目。

【Visual Leak Detector】源码调试 VLD 库插图

1.2 设置调试程序

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

【Visual Leak Detector】源码调试 VLD 库插图1

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

【Visual Leak Detector】源码调试 VLD 库插图2

1.3 设置输出目录

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

【Visual Leak Detector】源码调试 VLD 库插图3

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

【Visual Leak Detector】源码调试 VLD 库插图4

1.4 拷贝 vld 依赖文件

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

【Visual Leak Detector】源码调试 VLD 库插图5

1.5 加断点调试

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

【Visual Leak Detector】源码调试 VLD 库插图6

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 库

THE END
分享
二维码