使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 源码的调试。同系列文章目录可见 《内存泄漏检测工具》目录
(相关资料图)
以 vld2.5.1版本为例,下载源码 后,源码包中各文件的用途可看本人另一篇博客 【VLD】源码文件概览。使用 VLD进行泄漏检测时,有时候会出现突然崩溃、退出时没有打印以下提示信息等情况,此时就可以调试一下 VLD的源码,查一查是哪里出了问题。
Visual Leak Detector is now exiting.与其他 DLL的调试方法一样,VLD源码调试遵循以下步骤(参考 MSDN - how-to-debug-from-a-dll-project)。
使用 VS2015打开 vld_vs14.sln,将 vld设置为启动项目。
进入 vld 属性页-> 配置属性-> 调试页面。选择 Debug模式,选择 本地 Windows 调试器,根据自己需求设置调试程序与调试程序的启动参数。点击确定。
这个 命令就是指调用 vld.dll的程序(被称为调试程序)所在路径,我的是 E:\Cworkspace\VSDemo\testVLD\Debug\testVLD.exe,如果这个调试程序需要额外的参数,就把参数填写在下一行 命令参数中,没有参数空着就好。
进入 vld 属性页-> 配置属性-> 常规页面。选择 Debug模式,根据自己需求设置输出目录。点击确定。
设置为调试程序的同一级目录,我的是 E:\Cworkspace\VSDemo\testVLD\Debug,由于 vld_vs14.sln的路径为 E:\Cworkspace\VSDemo\vld-master,因此这里显示为相对路径。
将 vld安装目录中的 dbghelp.dll与 Microsoft.DTfW.DHL.manifest这两个文件拷贝至调试程序的同一级目录,我的是 E:\Cworkspace\VSDemo\testVLD\Debug,要注意是 Win32还是 x64,拷对应的才行。
至此,就可以开始调试了,不妨在 VisualLeakDetector类的构造函数中加一个断点,点击 本地 Windows 调试器开始调试(或者按 F5),程序成功停在了断点处。
调试时,有以下几点需注意:
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版本。
标签:
Copyright © 2015-2022 现在兽药网 版权所有 备案号:粤ICP备18023326号-5 联系邮箱:855 729 8@qq.com