說明 使用 VLD 記憶體泄漏檢測工具輔助開發時整理的學習筆記。本篇介紹 VLD 源碼的編譯。同系列文章目錄可見 《記憶體泄漏檢測工具》目錄 1. VLD 庫的依賴文件 以 vld2.5.1 版本為例,下載源碼 後,源碼包中各文件的用途可看本人另一篇博客 【VLD】源碼文件概覽。使用 vld2.5.1- ...
說明
使用 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,也不需要更改任何代碼。
本文作者:木三百川
本文鏈接:https://www.cnblogs.com/young520/p/17348208.html
版權聲明:本文系博主原創文章,著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請附上出處鏈接。遵循 署名-非商業性使用-相同方式共用 4.0 國際版 (CC BY-NC-SA 4.0) 版權協議。