说明
使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 源码的编译。同系列文章目录可见 《内存泄漏检测工具》目录
1. VLD 库的依赖文件
以 vld2.5.1
版本为例,下载源码 后,源码包中各文件的用途可看本人另一篇博客 【VLD】源码文件概览。使用 vld2.5.1-setup.exe 安装 VLD
时(可参考 【VLD】安装 VLD),安装目录结构如下:
D:\Program Files (x86)\Visual Leak Detector
│ AUTHORS.txt
│ CHANGES.txt
│ COPYING.txt
│ unins000.dat
│ unins000.exe
│ vld.ini
│
├─bin
│ ├─Win32
│ │ dbghelp.dll
│ │ Microsoft.DTfW.DHL.manifest
│ │ vld_x86.dll
│ │ vld_x86.pdb
│ │
│ └─Win64
│ dbghelp.dll
│ Microsoft.DTfW.DHL.manifest
│ vld_x64.dll
│ vld_x64.pdb
│
├─include
│ vld.h
│ vld_def.h
│
└─lib
├─Win32
│ vld.lib
│
└─Win64
vld.lib
除了 unins000.dat
与 unins000.exe
外,一共 16
个文件。查看源码包中的文件 .\setup\vld-setup.iss 第 44~59 行,可知这 16
个文件的来源:
[Files]
Source: "dbghelp\x64\dbghelp.dll"; DestDir: "{app}\bin\Win64"; Flags: ignoreversion
Source: "dbghelp\x64\Microsoft.DTfW.DHL.manifest"; DestDir: "{app}\bin\Win64"; Flags: ignoreversion
Source: "dbghelp\x86\dbghelp.dll"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
Source: "dbghelp\x86\Microsoft.DTfW.DHL.manifest"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
Source: "..\src\bin\Win32\Release-v140\vld.lib"; DestDir: "{app}\lib\Win32"; Flags: ignoreversion
Source: "..\src\bin\Win32\Release-v140\vld_x86.dll"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
Source: "..\src\bin\Win32\Release-v140\vld_x86.pdb"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
Source: "..\src\bin\x64\Release-v140\vld.lib"; DestDir: "{app}\lib\Win64"; Flags: ignoreversion
Source: "..\src\bin\x64\Release-v140\vld_x64.dll"; DestDir: "{app}\bin\Win64"; Flags: ignoreversion
Source: "..\src\bin\x64\Release-v140\vld_x64.pdb"; DestDir: "{app}\bin\Win64"; Flags: ignoreversion
Source: "..\src\vld.h"; DestDir: "{app}\include"; Flags: ignoreversion
Source: "..\src\vld_def.h"; DestDir: "{app}\include"; Flags: ignoreversion
Source: "..\vld.ini"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\AUTHORS.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\CHANGES.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\COPYING.txt"; DestDir: "{app}"; Flags: ignoreversion
- 【文件 1】安装目录文件
AUTHORS.txt
来自于源码根目录下同名文件。 - 【文件 2】安装目录文件
CHANGES.txt
来自于源码根目录下同名文件。 - 【文件 3】安装目录文件
COPYING.txt
来自于源码根目录下同名文件。 - 【文件 4】安装目录文件
vld.ini
来自于源码根目录下同名文件。 - 【文件 5】安装目录文件
.\include\vld.h
来自于源码目录.\src
下同名文件。 - 【文件 6】安装目录文件
.\include\vld_def.h
来自于源码目录.\src
下同名文件。 - 【文件 7】安装目录文件
.\bin\Win64\dbghelp.dll
来自于源码目录.\setup\dbghelp\x64
下同名文件。 - 【文件 8】安装目录文件
.\bin\Win64\Microsoft.DTfW.DHL.manifest
来自于源码目录.\setup\dbghelp\x64
下同名文件。 - 【文件 9】安装目录文件
.\bin\Win32\dbghelp.dll
来自于源码目录.\setup\dbghelp\x86
下同名文件。 - 【文件 10】安装目录文件
.\bin\Win32\Microsoft.DTfW.DHL.manifest
来自于源码目录.\setup\dbghelp\x86
下同名文件。 - 【文件 11】安装目录文件
.\bin\Win64\vld_x64.dll
由Visual Studio 2015
的Release
、x64
模式编译源码生成。 - 【文件 12】安装目录文件
.\bin\Win64\vld_x64.pdb
由Visual Studio 2015
的Release
、x64
模式编译源码生成。 - 【文件 13】安装目录文件
.\lib\Win64\vld.lib
由Visual Studio 2015
的Release
、x64
模式编译源码生成。 - 【文件 14】安装目录文件
.\bin\Win32\vld_x86.dll
由Visual Studio 2015
的Release
、Win32
模式编译源码生成。 - 【文件 15】安装目录文件
.\bin\Win32\vld_x86.pdb
由Visual Studio 2015
的Release
、Win32
模式编译源码生成。 - 【文件 16】安装目录文件
.\lib\Win32\vld.lib
由Visual Studio 2015
的Release
、Win32
模式编译源码生成。
2. 源码编译生成 VLD 库
使用 Visual Studio 2015
打开源码根目录下的 vld_vs14.sln
或者 vld_vs14_wo_mfc.sln
,当仅用于生成 VLD
库时,这两个解决方案的生成结果是一样的,详见本人另一篇博客 【VLD】源码文件概览。打开后,下拉构建配置框,可以看到有 6
种配置可供选择:Debug
、Debug_StaticCrt
、Debug_VldRelease
、Debug_VldRelease_StaticCrt
、Release
、Release_StaticCrt
,他们的区别在于链接的运行库版本不同(详见 项目属性 -> C/C++ -> 代码生成 -> 运行库),以及是否启用优化。
打开 配置管理器,下拉查看不同的 活动解决方案配置,发现除 Debug
、Debug_StaticCrt
模式外,其余 4
种配置下 vld
的配置都为 Release
。因此解决方案的配置选项选择除 Debug
、Debug_StaticCrt
外的 4
种都可以,不妨选择 Release
。
按下图步骤操作,生成 Win32
平台下的 VLD
库及 pdb
文件。
同样地,按下图步骤操作,生成 Win64
平台下的 VLD
库及 pdb
文件。
在生成目录 .\src\bin\Win32\Release-v140
下可以找到对应的 3
个文件:
同样地,在生成目录 .\src\bin\x64\Release-v140
下可以找到 Win64
平台的 3
个文件:
至此,VLD
安装目录下的 16
个文件已经全部具备,可以开始使用了。
3. 配置环境变量
由于没有使用 vld2.5.1-setup.exe 安装器,环境变量还需要自己来手动配置,将以上 16
个文件整理到一个目录下,最好依据前面的安装目录结构来进行整理,然后手动修改系统变量 Path
,增加对应的 Win32
版本路径与 Win64
版本路径,例如:
D:\Program Files (x86)\Visual Leak Detector\bin\Win32
D:\Program Files (x86)\Visual Leak Detector\bin\Win64
4. 使用 VLD 库
VLD
库的使用方式可参考本人同系列文章:
- 在 VS 2015 中使用 VLD。
- 在 QT 中使用 VLD(方式一)。这一种使用方式的缺点是,当把项目拷贝到别的电脑上编译运行时,需要按特定流程重新配置 VLD 环境。但优点是在一台电脑上配置完成后,用的时候十分方便,包含头文件就可以使用,不需添加任何多余的代码。
- 在 QT 中使用 VLD(方式二)。这一种使用方式的特点是,在一台电脑上安装完成后,需在项目
pro
文件中指明库及头文件的路径,然后在mian.cpp
文件中#include "vld.h"
。当把项目拷贝到别的电脑上编译运行时,需要确保该电脑已经具备了 VLD 环境,并更改项目pro
文件中指明的相关路径。 - 在 QT 中使用 VLD(方式三)。这一种使用方式的特点是,在一台电脑上安装完成后,将 VLD 安装目录下的 lib 库及 include 文件拷贝到项目目录中,在项目
pro
文件中指明库及头文件的路径,并将vld.ini
文件和 VLD 安装目录 bin 文件夹下的全部文件拷贝到项目生成目录下,最后在mian.cpp
文件中#include "vld.h"
。优点是,当把项目拷贝到别的电脑上编译运行时,该电脑无需安装 VLD,也不需要更改任何代码。
- 源码 Detector Visual Leak VLDdetector visual leak vld 源码detector visual leak detector方式visual leak skipheapfreeleaks detector visual leak detector visual leak 2015 skipcrtstartupleaks detector visual leak forceincludemodulesmd detector visual leak stackwalkmethod detector visual leak detector版本visual leak traceinternalframes detector visual leak