说明

使用 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
设置为启动项目。

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

1.2 设置调试程序

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

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

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

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

1.3 设置输出目录

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

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

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

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

1.4 拷贝 vld 依赖文件


vld
安装目录中的
dbghelp.dll

Microsoft.DTfW.DHL.manifest
这两个文件拷贝至调试程序的同一级目录,我的是
E:\Cworkspace\VSDemo\testVLD\Debug
,要注意是
Win32
还是
x64
,拷对应的才行。

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

1.5 加断点调试

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

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

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
    版本。

标签: none

添加新评论