主頁 > 後端開發 > 【Visual Leak Detector】原始碼檔案概覽

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

2023-04-23 07:33:28 後端開發

說明

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

目錄
  • 說明
  • 1. 整體概覽
  • 2. 檔案夾 .teamcity
  • 3 檔案夾 lib
    • 3.1 檔案夾 cppformat(生成 libformat)
    • 3.2 檔案夾 dbghelp
    • 3.3 檔案夾 gtest(生成 libgtest)
  • 4 檔案夾 mfc_detect(vld 輔助工程)
  • 5 檔案夾 setup
    • 5.1 檔案夾 dbghelp
    • 5.2 檔案夾 editenv
    • 5.3 檔案 build_version.bat
    • 5.4 檔案 license-free.txt
    • 5.5 檔案 modpath.iss
    • 5.6 檔案 version.h
    • 5.7 檔案 vld-setup.iss
    • 5.8 檔案 WizSmallImage.bmp
  • 6 檔案夾 src
    • 6.1 外部 34 個檔案(vld 核心工程)
    • 6.2 檔案夾 tests
    • 6.3 檔案夾 tests\basics(測驗工程)
    • 6.4 檔案夾 tests\console(示例工程)
    • 6.5 檔案夾 tests\corruption(測驗工程)
    • 6.6 檔案夾 tests\dynamic_app(測驗工程)
    • 6.7 檔案夾 tests\dynamic_dll(測驗輔助工程)
    • 6.8 檔案夾 tests\mfc(示例工程)
    • 6.9 檔案夾 tests\mfc_dll(測驗輔助工程)
    • 6.10 檔案夾 tests\suite(測驗工程)
    • 6.11 檔案夾 tests\vld_ComTest(測驗輔助工程)
    • 6.12 檔案夾 tests\vld_dll1(測驗輔助工程)
    • 6.13 檔案夾 tests\vld_dll2(測驗輔助工程)
    • 6.14 檔案夾 tests\vld_main(示例工程)
    • 6.15 檔案夾 tests\vld_main_test(測驗工程)
    • 6.16 檔案夾 tests\vld_unload(測驗工程)
  • 7 其余 12 個檔案
    • 7.1 檔案 .editorconfig
    • 7.2 檔案 .gitignore
    • 7.3 檔案 .mailmap
    • 7.4 檔案 appveyor.yml
    • 7.5 檔案 AUTHORS.txt
    • 7.6 檔案 CHANGES.txt
    • 7.7 檔案 change_toolset.ps1
    • 7.8 檔案 COPYING.txt
    • 7.9 檔案 README.md
    • 7.10 檔案 vld.ini
    • 7.11 檔案 vld_vs14.sln
    • 7.12 檔案 vld_vs14_wo_mfc.sln


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.cpp、vld.cpp、vld_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-editenv,KindDragon 新版 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

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

  • 牧之博客-.editorconfig 檔案,
  • Microsoft-使用 EditorConfig 創建可移植的自定義編輯器設定,
  • EditorConfig,

7.2 檔案 .gitignore

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

7.3 檔案 .mailmap

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

  • 騰訊云開發者社區-如何使用git .mailmap顯示作者組織?,
  • w3cschool-git-check-mailmap,

7.4 檔案 appveyor.yml

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

  • appveyor-docs,
  • 51CTO博客-使用Appveyor持續集成博客,

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) 著作權協議,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/550853.html

標籤:其他

上一篇:Java學習(1)

下一篇:返回列表

標籤雲
其他(157850) Python(38092) JavaScript(25381) Java(17985) C(15215) 區塊鏈(8256) C#(7972) AI(7469) 爪哇(7425) MySQL(7137) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4557) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2430) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1959) Web開發(1951) HtmlCss(1919) python-3.x(1918) 弹簧靴(1913) C++(1910) xml(1889) PostgreSQL(1872) .NETCore(1854) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 【Visual Leak Detector】原始碼檔案概覽

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

    uj5u.com 2023-04-23 07:33:28 more
  • Java學習(1)

    一、Java的基礎語法 1.變數和資料型別 在Java中,變數是用來存盤資料的容器,可以存盤各種型別的資料。Java中的變數分為兩類:基本資料型別變數和參考資料型別變數。 (1)基本資料型別(Primitive Data Types) 整數型別:byte、short、int、long 浮點型別:fl ......

    uj5u.com 2023-04-23 07:33:23 more
  • python| 關于excel的檔案處理

    創建一個成績單檔案score.xlsx,將平時成績單.xlsx檔案中對應班級作業表中學號和姓名列的內容寫入到score.xlsx中,并添加成績列,每個學生的成績采用隨機生成的一個分數填寫進去,最后統計所有學生的平均成績計算出來后,寫入到score.xlsx的最后一行最后一列之后的單元格中去。預想的步 ......

    uj5u.com 2023-04-23 07:33:18 more
  • Django筆記二十八之資料庫查詢優化匯總

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十八之資料庫查詢優化匯總 這一篇筆記將從以下幾個方面來介紹 Django 在查詢程序中的一些優化操作,有一些是介紹如何獲取 Django 查詢轉化的 sql 陳述句,有一些是理解 QuerySet 是如何獲取資料的。 以下是本篇筆記目錄: ......

    uj5u.com 2023-04-23 07:33:12 more
  • 多執行緒(一)

    #一:什么是多執行緒 執行緒是作業系統能夠進行運算調度的最小單位;它被包含在行程之中,是行程中的實際運作單位。 多執行緒,是指從軟體或者硬體上實作多個執行緒并發執行的技術。具有多執行緒能力的計算機因有硬體支持而能夠在同一時間執行多于一個執行緒,進而提升整體處理性能。 簡單來說:執行緒是程式中一個單一的順序控制流程 ......

    uj5u.com 2023-04-23 07:33:06 more
  • Springboot 多實體負載均衡部署

    Springboot 多實體負載均衡部署 一、測驗代碼: 控制層測驗代碼: import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; @Controller @Re ......

    uj5u.com 2023-04-23 07:33:00 more
  • Go中回應式編程庫RxGo詳細介紹

    最近的專案用到了 RxGo ,因為之前從沒有接觸過,特意去學了學,特此記錄下。文章很多內容是復制了參考資料或者官方檔案。如果涉及侵權,請聯系洗掉,謝謝。 1、RxGo簡介 1.1 基礎介紹 RxGo是一個基于Go語言的回應式編程庫,它提供了一種簡單而強大的方式來處理異步事件流和資料流。RxGo的設計 ......

    uj5u.com 2023-04-23 07:32:39 more
  • Midjourney 提示詞工具(10 個國內外最好最推薦的)

    Midjourney,是一個革命性的基于人工智能的藝術生成器,可以從被稱為提示的簡單文本描述中生成令人驚嘆的影像。Midjourney已經迅速成為藝術家、設計師和營銷人員的首選工具(包括像我這樣根本不會設計任何東西的無能之輩)。 為了幫助你開始使用這個強大的工具,我們匯編了一份15個資源的清單,可以 ......

    uj5u.com 2023-04-23 07:32:23 more
  • C++的拓撲排序實作

    template<typename T = CString, typename _Data = https://www.cnblogs.com/shizhimofa/archive/2023/04/22/CString> struct Union_node//!< 節點 { Union_node() :nColor(0) {} std::vector<Union_node*> vecNodeSon; T ......

    uj5u.com 2023-04-23 07:32:18 more
  • Python基礎—conda使用筆記

    Python基礎—conda使用筆記 1. 環境配置 由于用conda管理虛擬環境真滴很方便,所以主要使用conda,就不單獨去裝Python了。 1.1. Miniconda3安裝 Miniconda3官網下載地址:Miniconda Miniconda3清華鏡像下載:清華鏡像-Miniconda ......

    uj5u.com 2023-04-23 07:32:02 more