【Visual Leak Detector】源碼文件概覽

来源:https://www.cnblogs.com/young520/archive/2023/04/22/17343785.html
-Advertisement-
Play Games

說明 使用 VLD 記憶體泄漏檢測工具輔助開發時整理的學習筆記。本篇對 VLD 源碼包中的各文件用途做個概述。同系列文章目錄可見 《記憶體泄漏檢測工具》目錄 1. 整體概覽 以 vld2.5.1 版本為例,下載源碼 後,根目錄下一共 5 個文件夾:.teamcity、lib、mfc_detect、set ...


說明

使用 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

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關註“木三百川”

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

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關註“木三百川”

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

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關註“木三百川”

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 個文件。

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關註“木三百川”

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 個文件。

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關註“木三百川”

  • 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 庫項目、測試項目、示例項目,如下圖所示:

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關註“木三百川”

各項目的簡要介紹見下表,可以根據項目文件夾名稱上翻本文章到介紹處。

標號 項目名稱 對應文件夾名稱 項目簡介
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 一樣),如下圖所示:

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關註“木三百川”

本文作者:木三百川

本文鏈接:https://www.cnblogs.com/young520/p/17343785.html

版權聲明:本文系博主原創文章,著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請附上出處鏈接。遵循 署名-非商業性使用-相同方式共用 4.0 國際版 (CC BY-NC-SA 4.0) 版權協議。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 業務需求:上傳頭像,上傳完畢後拿到頭像的url,把頭像展示在頁面中,最終把頭像url和其他用戶信息一起發送給伺服器 上傳頭像流程 導入 Upload 組件和圖標(一個加號,一個載入中) import { Upload } from 'antd'; import { PlusOutlined, Loa ...
  • 這是一個博客園的首頁面的展示前端代碼和樣式代碼 樣式代碼CSS採用外部鏈接,建好文件直接複製運行vscode即可,話不多說,直接上代碼 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Mickey - 博客園</title> < ...
  • chatPDF或者chatGPT的界面挺簡潔的,就是一個左側的列表以及右側的對話列表,現在使用css實現這樣的佈局 充分運用了flex佈局方式實現,左右分欄,以及對話形式展示效果 下麵是效果圖: 在手機設備看就隱藏左側,右側100%適應 下麵就是html和css的佈局代碼 <style> .chat ...
  • 一、優缺點 ActiveMQ 官網地址:http://activemq.apache.org/ - 官網介紹 Apache ActiveMQ是最流行的開源、多協議、基於Java的消息代理。它支持行業標準協議,因此用戶可以從多種語言和平臺的客戶端選擇中獲益。從JavaScript、C、C++、Pyth ...
  • 圖像金字塔 簡單來說就是 自下而上圖像一步一步縮小 1 高斯金字塔(涉及高斯分佈) 向下採樣(縮小,對金字塔來說是自下向上) 第一步: 高斯濾波去噪 第二部:將偶數行和列去掉 向上採樣(放大,對金字塔來說是自上向下) 第一步:在每個方向上擴大兩倍,新增的行和列填充0 第二步:利用之前同樣的內核進行捲 ...
  • 8.1 線程簡介 1 、多任務 現實生活中多件事一起作。 在程式中是指在一個系統中可以同時進行多個進程,即有多個單獨運行的任務,每一個任務對應一個進程。 每一個進程都有一段專用的記憶體區域,即使是多次啟動同一段程式產生不同的進程也是如此。 2、多線程 Java 給多線程編程提供了內置的支持。 一條線程 ...
  • Canny檢測的流程 Canny檢測主要是用於邊緣檢測 1)使用高斯濾波器,以平滑圖像,濾除雜訊。 2)計算圖像中每個像素點的梯度強度和方向。 3)應用非極大值(Non-Maximum Suppression)抑制,以消除邊緣檢測帶來的雜散響應 4)應用雙閾值(Double-Threshold)檢測 ...
  • 題目描述 輸入年份和月份,輸出這一年的這一月有多少天。需要考慮閏年。 輸入格式 輸入兩個正整數,分別表示年份 $y$ 和月數 $m$,以空格隔開。 輸出格式 輸出一行一個正整數,表示這個月有多少天。 樣例 #1 樣例輸入 #1 1926 8 樣例輸出 #1 31 樣例輸入 #2 2000 2 樣例輸 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...