使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 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
AUTHORS.txt
来自于源码根目录下同名文件。CHANGES.txt
来自于源码根目录下同名文件。COPYING.txt
来自于源码根目录下同名文件。vld.ini
来自于源码根目录下同名文件。.\include\vld.h
来自于源码目录 .\src
下同名文件。.\include\vld_def.h
来自于源码目录 .\src
下同名文件。.\bin\Win64\dbghelp.dll
来自于源码目录 .\setup\dbghelp\x64
下同名文件。.\bin\Win64\Microsoft.DTfW.DHL.manifest
来自于源码目录 .\setup\dbghelp\x64
下同名文件。.\bin\Win32\dbghelp.dll
来自于源码目录 .\setup\dbghelp\x86
下同名文件。.\bin\Win32\Microsoft.DTfW.DHL.manifest
来自于源码目录 .\setup\dbghelp\x86
下同名文件。.\bin\Win64\vld_x64.dll
由 Visual Studio 2015
的 Release
、x64
模式编译源码生成。.\bin\Win64\vld_x64.pdb
由 Visual Studio 2015
的 Release
、x64
模式编译源码生成。.\lib\Win64\vld.lib
由 Visual Studio 2015
的 Release
、x64
模式编译源码生成。.\bin\Win32\vld_x86.dll
由 Visual Studio 2015
的 Release
、Win32
模式编译源码生成。.\bin\Win32\vld_x86.pdb
由 Visual Studio 2015
的 Release
、Win32
模式编译源码生成。.\lib\Win32\vld.lib
由 Visual Studio 2015
的 Release
、Win32
模式编译源码生成。使用 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
个文件已经全部具备,可以开始使用了。
由于没有使用 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
VLD
库的使用方式可参考本人同系列文章:
pro
文件中指明库及头文件的路径,然后在 mian.cpp
文件中 #include "vld.h"
。当把项目拷贝到别的电脑上编译运行时,需要确保该电脑已经具备了 VLD 环境,并更改项目 pro
文件中指明的相关路径。pro
文件中指明库及头文件的路径,并将 vld.ini
文件和 VLD 安装目录 bin 文件夹下的全部文件拷贝到项目生成目录下,最后在 mian.cpp
文件中 #include "vld.h"
。优点是,当把项目拷贝到别的电脑上编译运行时,该电脑无需安装 VLD,也不需要更改任何代码。