【Visual Leak Detector】原始碼檔案概覽

2023-04-22 21:00:36

說明

使用 VLD 記憶體漏失檢測工具輔助開發時整理的學習筆記。本篇對 VLD 原始碼包中的各檔案用途做個概述。同系列文章目錄可見 《記憶體漏失檢測工具》目錄


1. 整體概覽

vld2.5.1 版本為例,下載原始碼 後,根目錄下一共 5 個資料夾:.teamcitylibmfc_detectsetupsrc。還有 12 個檔案:.editorconfig.gitignore.mailmapappveyor.ymlAUTHORS.txtchange_toolset.ps1CHANGES.txtCOPYING.txtREADME.mdvld.inivld_vs14.slnvld_vs14_wo_mfc.sln

2. 資料夾 .teamcity

該資料夾的目錄結構如下:

vld-master\.teamcity
└─Vld
    │  project-config.xml
    │
    ├─buildTypes
    │      Vld_CompileAll.xml
    │      Vld_DebugCrtDllWin32.xml
    │
    ├─pluginData
    │      plugin-settings.xml
    │
    └─vcsRoots
            Vld_HttpsGithubComKindDragonVldGitRefsHeadsMaster.xml

裡面全是 xml 檔案,是 teamcity 持續整合工具的組態檔,用於 VLD 專案原始碼的整合管理,關於該工具的介紹,可存取其官網:Jetbrains-teamcity

3 資料夾 lib

該資料夾下有三個子資料夾:cppformatdbghelpgtest

3.1 資料夾 cppformat(生成 libformat)

該資料夾的目錄結構如下:

vld-master\lib\cppformat
    ChangeLog.rst
    format.cc
    format.h
    format.vcxproj
    format.vcxproj.filters
    LICENSE.rst
    posix.cc
    posix.h

cppformat 是一個開源的 C++ 格式化庫,倉庫地址為 Github-fmtlib,在 VLD 中被用來格式化輸出堆疊資訊,詳見 原始碼 callstack.cpp 第 224~275 行

3.2 資料夾 dbghelp

該資料夾的目錄結構如下:

vld-master\lib\dbghelp
├─include
│      DbgHelp.h
│
└─lib
    ├─Win32
    │      DbgHelp.Lib
    │
    └─x64
            DbgHelp.Lib

dbghelpWindows 系統下的偵錯跟蹤庫,相關資訊可見 關於 DbgHelp,在 VLD 中被用來獲取堆疊資訊,詳見原始碼中 callstack.cppvld.cppvld_hooks.cpp 等檔案。

3.3 資料夾 gtest(生成 libgtest)

該資料夾的目錄結構如下:

vld-master\lib\gtest
│  CHANGES
│  CMakeLists.txt
│  configure
│  configure.ac
│  CONTRIBUTORS
│  LICENSE
│  Makefile.am
│  Makefile.in
│  README
│
├─include
│  └─gtest
│      │  gtest-death-test.h
│      │  gtest-message.h
│      │  gtest-param-test.h
│      │  gtest-param-test.h.pump
│      │  gtest-printers.h
│      │  gtest-spi.h
│      │  gtest-test-part.h
│      │  gtest-typed-test.h
│      │  gtest.h
│      │  gtest_pred_impl.h
│      │  gtest_prod.h
│      │
│      └─internal
│              gtest-death-test-internal.h
│              gtest-filepath.h
│              gtest-internal.h
│              gtest-linked_ptr.h
│              gtest-param-util-generated.h
│              gtest-param-util-generated.h.pump
│              gtest-param-util.h
│              gtest-port.h
│              gtest-string.h
│              gtest-tuple.h
│              gtest-tuple.h.pump
│              gtest-type-util.h
│              gtest-type-util.h.pump
│
├─msvc
│      gtest-md.sln
│      gtest.sln
│      gtest.vcxproj
│      gtest.vcxproj.filters
│      gtest_main.vcxproj
│      gtest_main.vcxproj.filters
│      gtest_prod_test.vcxproj
│      gtest_prod_test.vcxproj.filters
│      gtest_unittest.vcxproj
│      gtest_unittest.vcxproj.filters
│
└─src
        gtest-all.cc
        gtest-death-test.cc
        gtest-filepath.cc
        gtest-internal-inl.h
        gtest-port.cc
        gtest-printers.cc
        gtest-test-part.cc
        gtest-typed-test.cc
        gtest.cc
        gtest_main.cc

gtestGoogle 開源的單元測試框架,倉庫地址為 Github-googletest,在 VLD 中被用來測試 VLD 的各個功能,生成測試報告,詳見 vld-master\src\tests 資料夾

4 資料夾 mfc_detect(vld 輔助工程)

該資料夾的目錄結構如下:

vld-master\mfc_detect
│  resource.h
│  StdAfx.cpp
│  StdAfx.h
│  vldmfc.cpp
│  vldmfc.h
│  vldmfc.rc
│  vldmfc_detect.sln
│  vldmfc_detect.vcxproj
│  vldmfc_detect.vcxproj.filters
│  vldmfc_detect_vs10.sln
│  vldmfc_detect_vs11.sln
│  vldmfc_detect_vs14.sln
│
└─res
        vldmfc.ico
        vldmfc.rc2

這個資料夾中的 sln 解決方案,主要用於獲取各版本 mfc.dllnew 函數序號(即 ORDINAL 值),將獲取的函數序號用於 VLD 開發,用處詳見 原始碼 dllspatches.cpp 第 88~370 行,獲取思路詳見 StackOverflow-Getting-ordinal-from-function-name-programmatically,獲取時對應的動態庫版本及函數詳見 檔案 vldmfc.cpp 第 189~301 行。這個資料夾下有多個 .sln 檔案,它們分別對應不同的 Microsoft Visual Studio 版本,將其用記事本或其他文字編輯器開啟,可以知道對應的版本號:

  • 檔案 vldmfc_detect.sln 對應 Visual Studio 2008VC 版本號為 VC9.0
  • 檔案 vldmfc_detect_vs10.sln 對應 Visual Studio 2010VC 版本號為 VC10.0
  • 檔案 vldmfc_detect_vs11.sln 對應 Visual Studio 2012VC 版本號為 VC11.0
  • 檔案 vldmfc_detect_vs14.sln 對應 Visual Studio 2015VC 版本號為 VC14.0

5 資料夾 setup

這個資料夾中的檔案主要用來打包 VLD 的安裝程式,使用的安裝製作軟體為 Inno Setup 5.4.2,其官網為:Inno Setup。該資料夾下有兩個子資料夾:dbghelpeditenv。以及 6 個檔案:build_version.batlicense-free.txtmodpath.issversion.hvld-setup.issWizSmallImage.bmp

5.1 資料夾 dbghelp

該資料夾的目錄結構如下:

vld-master\setup\dbghelp
├─x64
│      dbghelp.dll
│      Microsoft.DTfW.DHL.manifest
│
└─x86
        dbghelp.dll
        Microsoft.DTfW.DHL.manifest

dbghelp 下儲存的是 VLD 依賴的 dbghelp 動態庫及對應的清單檔案(.manifest 檔案),安裝 VLD 時會被儲存到 VLD 安裝目錄下(詳見 .\Visual Leak Detector\bin)。

5.2 資料夾 editenv

該資料夾的目錄結構如下,只有一個 editenv.dll 檔案:

vld-master\setup\editenv
    editenv.dll

這個庫是 Dan Moulding 舊版 VLD 修改環境變數時使用的動態庫,詳見 StackOverflow-programmatically-adding-a-directory-to-windows-path-environment-variable,對應的倉庫為 Github-editenvKindDragon 新版 VLD 是沒有用到這個檔案的,使用的是檔案 modpath.iss,另一種方法。

5.3 檔案 build_version.bat

檔案 build_version.bat 是批次處理指令碼,用於 Inno Setup 快速打包 VLD 安裝器。

5.4 檔案 license-free.txt

檔案 license-free.txt 是要在 VLD 安裝程式中顯示的許可資訊。

5.5 檔案 modpath.iss

檔案 modpath.issInno Setup 指令碼,採用 Pascal 編寫,用於 VLD 安裝時修改 Path 環境變數。

5.6 檔案 version.h

檔案 version.h 儲存 VLD 的版本資訊,被 VLD 原始碼參照,詳見 原始碼 vldint.h 第 40 行

5.7 檔案 vld-setup.iss

檔案 vld-setup.issInno Setup 生成的指令碼,用於指導生成 VLD 安裝器,預設情況下,在安裝完成後會生成對應的解除安裝器 unins000.datunins000.exe,詳見 VLD 安裝目錄。

5.8 檔案 WizSmallImage.bmp

檔案 WizSmallImage.bmp 是安裝程式右上角顯示的影象。

6 資料夾 src

這個資料夾用來儲存 VLD 庫的核心原始碼,以及 VLD 功能測試的原始碼。有一個 tests 子資料夾及另外 34 個檔案。

6.1 外部 34 個檔案(vld 核心工程)

34 個檔案分別為:

vld-master\src
   callstack.cpp
   callstack.h
   criticalsection.h
   crtmfcpatch.h
   dbghelp.h
   dllspatches.cpp
   loaderlock.h
   map.h
   ntapi.cpp
   ntapi.h
   resource.h
   runalltests.bat
   runtests.bat
   set.h
   stdafx.cpp
   stdafx.h
   tree.h
   utility.cpp
   utility.h
   vld.cpp
   vld.dll.dependency.x64.manifest
   vld.dll.dependency.x86.manifest
   vld.h
   vld.natvis
   vld.rc
   vld.vcxproj
   vld.vcxproj.filters
   vldallocator.h
   vldapi.cpp
   vldheap.cpp
   vldheap.h
   vldint.h
   vld_def.h
   vld_hooks.cpp

其中有 17.h 檔案、9.cpp 檔案,都是 VLD 核心原始碼的一部分,以下 6 個檔案用於 VLD 專案設定、依賴庫的版本控制等:

vld.natvis
vld.rc
vld.vcxproj
vld.vcxproj.filters
vld.dll.dependency.x64.manifest
vld.dll.dependency.x86.manifest

以下兩個批次檔用於 VLD 的功能批次測試,並自動生成測試報告。

runalltests.bat
runtests.bat

6.2 資料夾 tests

這個資料夾用來儲存 VLD 的測試工程程式碼以及使用範例工程程式碼,有 14 個子資料夾及另外 2 個檔案。

  • Common.propsVS 的屬性管理檔案,被多個 VLD 測試工程所使用,使用介紹可參考 .vcxproj 和 .props 檔案結構
  • copydlls.bat 是批次處理指令碼,被用做為 VLD 測試工程的預先生成事件(Pre-Build Event),將 vld.inivld_xx.dllvld_xx.pdbdbghelp.dllMicrosoft.DTfW.DHL.manifest5 個依賴檔案複製到指定目錄。

6.3 資料夾 tests\basics(測試工程)

該資料夾的目錄結構如下:

vld-master\src\tests\basics
    Allocs.cpp
    Allocs.h
    basics.cpp
    basics.vcxproj
    basics.vcxproj.filters
    basics_disabled.cpp
    stdafx.cpp
    stdafx.h
    targetver.h

這是一個 VLD 測試工程,用來測試:當使用不同的記憶體分配函數(例如 malloccallocplacement new 等)時,VLD 能否正確檢測出記憶體漏失。被測的記憶體分配函數詳見 Allocs.h 檔案Allocs.cpp 檔案。測試用例詳見 basics.cpp 檔案basics_disabled.cpp 檔案

6.4 資料夾 tests\console(範例工程)

該資料夾的目錄結構如下:

vld-master\src\tests\console
    main.c
    main.cpp
    README.md
    vldconsole.sln
    vldconsole.vcxproj
    vldconsole.vcxproj.filters
    vldconsole_vs10.sln

這是一個 VLD 範例工程,用來演示如何在普通的控制檯程式中使用 VLD 庫,演示目標為:VLD 庫不僅能檢測出 C 程式中 malloc 引起的洩漏(詳見 main.c 檔案),也能檢測出 C++ 程式中 new 引起的洩漏(詳見 main.cpp 檔案)。

  • 檔案 vldconsole.sln 對應 Visual Studio 2008VC 版本號為 VC9.0
  • 檔案 vldconsole_vs10.sln 對應 Visual Studio 2010VC 版本號為 VC10.0

6.5 資料夾 tests\corruption(測試工程)

該資料夾的目錄結構如下:

vld-master\src\tests\corruption
    corruption.cpp
    corruption.vcxproj
    corruption.vcxproj.filters
    stdafx.cpp
    stdafx.h
    targetver.h
    Tests.cpp
    Tests.h

這是一個 VLD 測試工程,用來測試:當記憶體分配函數與釋放函數不匹配(例如 mallocdelete 配對使用)、分配的堆與釋放的堆不匹配時,VLD 能否正確檢測出記憶體漏失。被測的失配用法詳見 Tests.h 檔案Tests.cpp 檔案。測試用例詳見 corruption.cpp 檔案

6.6 資料夾 tests\dynamic_app(測試工程)

該資料夾的目錄結構如下:

vld-master\src\tests\dynamic_app
    dynamic_app.cpp
    dynamic_app.vcxproj
    dynamic_app.vcxproj.filters
    LoadTests.cpp
    LoadTests.h
    stdafx.cpp
    stdafx.h
    targetver.h
    ThreadTest.cpp
    ThreadTests.h

這是一個 VLD 測試工程,用來測試:當動態載入普通動態庫與 MFC 動態庫時,VLDEnableModuleVLDResolveCallstacks 功能是否正常,以及當在多執行緒中載入動態庫時,VLDGetLeaksCount 及洩漏檢測功能是否正常。被測的動態載入用法詳見 LoadTests.h 檔案LoadTests.cpp 檔案,被測的多執行緒用法詳見 ThreadTests.h 檔案ThreadTest.cpp 檔案。測試用例詳見 dynamic_app.cpp 檔案。這一測試工程需依賴 dynamic.dlltest_mfc.dll 這兩個動態庫,它們由 tests 資料夾下的另外兩個工程生成。

6.7 資料夾 tests\dynamic_dll(測試輔助工程)

該資料夾的目錄結構如下:

vld-master\src\tests\dynamic_dll
    dllmain.cpp
    dynamic.cpp
    dynamic.h
    dynamic.vcxproj
    dynamic.vcxproj.filters
    stdafx.cpp
    stdafx.h
    targetver.h

這是一個 VLD 測試輔助工程,用來生成動態庫 dynamic.dll,然後將生成的動態庫給其他測試工程做 VLD 功能測試。庫中用三種方式(mallocnewnew[])分別產生 6 處洩漏,一共 18 處洩漏,且庫原始碼中未包含 vld.h,詳見 dynamic.h 檔案dynamic.cpp 檔案

6.8 資料夾 tests\mfc(範例工程)

該資料夾的目錄結構如下:

vld-master\src\tests\mfc
│  resource.h
│  StdAfx.cpp
│  StdAfx.h
│  vldmfc.cpp
│  vldmfc.h
│  vldmfc.rc
│  vldmfc.sln
│  vldmfc.vcxproj
│  vldmfc.vcxproj.filters
│  vldmfcdlg.cpp
│  vldmfcdlg.h
│  vldmfc_vs10.sln
│
└─res
        vldmfc.ico
        vldmfc.rc2

這是一個 VLD 範例工程,用來演示如何在 MFC 程式中使用 VLD 庫,演示目標為:VLD 庫能檢測出 MFC 程式中的記憶體漏失。它通過模態顯示一個選擇對話方塊(詳見 vldmfcdlg.h 檔案vldmfcdlg.cpp 檔案),讓使用者選擇是否故意產生一個記憶體漏失(詳見 vldmfc.h 檔案vldmfc.cpp 檔案),然後通過檢視控制檯的 VLD 輸出,來演示其記憶體漏失檢測功能。

  • 檔案 vldmfc.sln 對應 Visual Studio 2008VC 版本號為 VC9.0
  • 檔案 vldmfc_vs10.sln 對應 Visual Studio 2010VC 版本號為 VC10.0

6.9 資料夾 tests\mfc_dll(測試輔助工程)

該資料夾的目錄結構如下:

vld-master\src\tests\mfc_dll
│  mfc.cpp
│  mfc.def
│  mfc.h
│  mfc.rc
│  mfc.vcxproj
│  mfc.vcxproj.filters
│  Resource.h
│  stdafx.cpp
│  stdafx.h
│  targetver.h
│
└─res
        mfc.rc2

這是一個 VLD 測試輔助工程,用來生成動態庫 test_mfc.dll,然後將生成的動態庫給其他測試工程做 VLD 功能測試。庫中用三種方式(newCString initialisation with stringnew[])產生一共 11 處洩漏,且庫原始碼中未包含 vld.h,詳見 mfc.cpp 檔案

6.10 資料夾 tests\suite(測試工程)

該資料夾的目錄結構如下:

vld-master\src\tests\suite
    testsuite.cpp
    testsuite.vcxproj
    testsuite.vcxproj.filters
    testsuite.vcxproj.vspscc

這是一個 VLD 測試工程,只有一個 cpp 檔案,用來測試:在多執行緒(使用 _beginthreadex 建立執行緒)、多種分配方式(例如 newmallocHeapAlloc 等)、不同遞迴深度、隨機分配記憶體、隨機釋放記憶體時,VLD 能否按需正確檢測出記憶體漏失(測試過程中也會隨機地配對使用 VLDDisableVLDRestore 忽略一些洩漏,詳見 testsuite.cpp 第 220~225 行)。

6.11 資料夾 tests\vld_ComTest(測試輔助工程)

該資料夾的目錄結構如下:

vld-master\src\tests\vld_ComTest
    ComTest.aps
    ComTest.cpp
    ComTest.def
    ComTest.idl
    ComTest.rc
    ComTest.rgs
    ComTest.sln
    ComTest_vs14.vcxproj
    ComTest_vs14.vcxproj.filters
    dlldata.c
    dllmain.cpp
    dllmain.h
    MyMath.cpp
    MyMath.h
    MyMath.rgs
    Resource.h
    stdafx.cpp
    stdafx.h
    targetver.h
    xdlldata.c
    xdlldata.h

這是一個 VLD 測試輔助工程,用於測試 VLD 能否檢測到 COM-based leaks,工程執行後生成了一個 COM 元件 ComTest.dll,原始檔 stdafx.h 中有 #include <vld.h>,但其介面函數並沒有故意產生記憶體漏失(如下,詳見 MyMath.cpp 檔案),且在 tests 資料夾下未發現有工程使用了 ComTest.dll

STDMETHODIMP CMyMath::Test(void)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	return S_OK;
}

6.12 資料夾 tests\vld_dll1(測試輔助工程)

該資料夾的目錄結構如下:

vld-master\src\tests\vld_dll1
    dllmain.cpp
    stdafx.cpp
    stdafx.h
    targetver.h
    vld_dll1_vs14.vcxproj
    vld_dll1_vs14.vcxproj.filters

這是一個 VLD 測試輔助工程,用來生成動態庫 vld_dll1.dll,然後將生成的動態庫給其他測試工程做 VLD 功能測試,這個庫原始碼中包含了 vld.h,且使用了 VLD_FORCE_ENABLE 宏。庫中用 malloc 產生 1 處洩漏,詳見 dllmain.cpp 檔案

6.13 資料夾 tests\vld_dll2(測試輔助工程)

該資料夾的目錄結構如下:

vld-master\src\tests\vld_dll2
    dllmain.cpp
    stdafx.cpp
    stdafx.h
    targetver.h
    vld_dll2_vs14.vcxproj
    vld_dll2_vs14.vcxproj.filters

這是一個 VLD 測試輔助工程,用來生成動態庫 vld_dll2.dll,然後將生成的動態庫給其他測試工程做 VLD 功能測試。與 vld_dll1.dll 一樣,這個庫原始碼中(stdafx.h 檔案)包含了 vld.h,且使用了 VLD_FORCE_ENABLE 宏。庫中用 malloc 產生 1 處洩漏,詳見 dllmain.cpp 檔案

6.14 資料夾 tests\vld_main(範例工程)

該資料夾的目錄結構如下:

vld-master\src\tests\vld_main
    stdafx.cpp
    stdafx.h
    targetver.h
    vld_main.cpp
    vld_main_vs14.vcxproj
    vld_main_vs14.vcxproj.filters

這是一個 VLD 範例工程,工程執行後生成了 vld_main.exe,演示目標為:VLD 能檢測出全域性靜態變數的記憶體漏失,詳見 vld_main.cpp 檔案

6.15 資料夾 tests\vld_main_test(測試工程)

該資料夾的目錄結構如下:

vld-master\src\tests\vld_main_test
    stdafx.cpp
    stdafx.h
    targetver.h
    vld_main_test.cpp
    vld_main_test_vs14.vcxproj
    vld_main_test_vs14.vcxproj.filters

這是一個 VLD 測試工程,用來測試:VLD 對全域性靜態變數的洩漏檢測功能是否正常,被測程式為 tests\vld_main 工程生成的 vld_main.exe。測試用例詳見 vld_main_test.cpp 檔案

6.16 資料夾 tests\vld_unload(測試工程)

該資料夾的目錄結構如下:

vld-master\src\tests\vld_unload
    stdafx.cpp
    stdafx.h
    targetver.h
    vld_unload.cpp
    vld_unload_vs14.vcxproj
    vld_unload_vs14.vcxproj.filters

這是一個 VLD 測試工程,用來測試:主工程未包含 vld.h,但多個被調的動態庫包含 vld.h 時,對各 dll 進行動態安裝、動態解除安裝的情況下,VLD 的洩漏檢測功能是否正常。測試用例詳見 vld_unload.cpp 檔案。這一測試工程需依賴 vld_dll1.dllvld_dll2.dll 這兩個動態庫,它們由 tests 資料夾下的另外兩個工程生成。

7 其餘 12 個檔案

原始碼根目錄下還有以下 12 個檔案:

vld-master
   .editorconfig
   .gitignore
   .mailmap
   appveyor.yml
   AUTHORS.txt
   CHANGES.txt
   change_toolset.ps1
   COPYING.txt
   README.md
   vld.ini
   vld_vs14.sln
   vld_vs14_wo_mfc.sln

7.1 檔案 .editorconfig

這個檔案用來統一程式碼樣式,幫助開發者維護編輯器編碼風格,以下幾個資料對理解該檔案的作用有幫助:

7.2 檔案 .gitignore

這個檔案用來指明原始碼上傳 Git 時,哪些檔案應該被忽略,這些檔案無需納入 Git 管理。Github-gitignore 上有一些 .gitignore 檔案模板,需要時可以拿來用。

7.3 檔案 .mailmap

這個檔案用於將作者姓名和電子郵件對映到單個規範值,以下幾個資料對理解該檔案的作用有幫助:

7.4 檔案 appveyor.yml

這個檔案用於持續整合服務,自動構建專案,以下幾個資料對理解該檔案的作用有幫助:

7.5 檔案 AUTHORS.txt

這個檔案用於羅列開發者清單。

7.6 檔案 CHANGES.txt

這個檔案用於記錄版本迭代紀錄檔,各版本更新提要。

7.7 檔案 change_toolset.ps1

這個檔案是一個 PowerShell 指令碼,閱讀內容可知這個指令碼是用來批次更改 Toolset 值的。除 format.vcxprojvld.vcxproj 這兩個檔案外,它能修改當前目錄及其所有子資料夾中的 vcxproj 檔案,將檔案中的 <PlatformToolset> 值修改為指定值。同時,修改 .\src\tests\Common.props 檔案中的 <VldToolset> 值為指定值。關於 <PlatformToolset>,可參考 Microsoft-platform-toolset 以及 關於VS專案屬性: Target Platform Version 和 Platform ToolSet

7.8 檔案 COPYING.txt

這是一份許可說明檔案,內容是 LGPL 2.1 開源協定。

7.9 檔案 README.md

這個檔案裡對 VLD 的功能用途做了大致介紹,與 Github-VLD 上的介紹內容一樣。

7.10 檔案 vld.ini

這個是 VLD 庫的組態檔,庫的使用者需要用到,使用方法詳見本人同系列文章。

7.11 檔案 vld_vs14.sln

這個檔案是 VLD 專案的解決方案檔案,需用 Visual Studio 2015 開啟,內含 16 個子專案,包含 VLD 庫專案、測試專案、範例專案,如下圖所示:

各專案的簡要介紹見下表,可以根據專案資料夾名稱上翻本文章到介紹處。

標號 專案名稱 對應資料夾名稱 專案簡介
1 dynamic vld-master\src\tests\dynamic_dll 測試用 - 依賴庫
2 test_mfc vld-master\src\tests\mfc_dll 測試用 - 依賴庫
3 vld_dll1 vld-master\src\tests\vld_dll1 測試用 - 依賴庫
4 vld_dll2 vld-master\src\tests\vld_dll2 測試用 - 依賴庫
5 libformat vld-master\lib\cppformat VLD - 輸出格式化庫
6 libgtest vld-master\lib\gtest\msvc Google Test 測試框架
7 ComTest vld-master\src\tests\vld_ComTest 測試用-依賴庫
8 corruption vld-master\src\tests\corruption 庫功能測試
9 dynamic_app vld-master\src\tests\dynamic_app 庫功能測試
10 test_basics vld-master\src\tests\basics 庫功能測試
11 testsuite vld-master\src\tests\suite 庫功能測試
12 vld_main vld-master\src\tests\vld_main 用法範例
13 vld_main_test vld-master\src\tests\vld_main_test 庫功能測試
14 vld_unload vld-master\src\tests\vld_unload 庫功能測試
15 vldmfc vld-master\src\tests\mfc 用法範例
16 vld vld-master\src VLD - 庫

7.12 檔案 vld_vs14_wo_mfc.sln

這個檔案也是 VLD 專案的解決方案檔案,需用 Visual Studio 2015 開啟,內含 13 個子專案,包含 VLD 庫專案、測試專案、範例專案,檔名中的 wowithout 的簡寫,表示沒有 MFC 相關的測試專案(除了沒有 test_mfcComTestvldmfc 這三個專案外,其他地方與 vld_vs14.sln 一樣),如下圖所示: