【Visual Leak Detector】源码文件概览
说明
使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇对 VLD 源码包中的各文件用途做个概述。同系列文章目录可见 《内存泄漏检测工具》目录
- 说明
- 1. 整体概览
- 2. 文件夹 .teamcity
- 3 文件夹 lib
- 4 文件夹 mfc_detect(vld 辅助工程)
- 5 文件夹 setup
- 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 个文件
1. 整体概览
以 vld2.5.1 版本为例,下载源码 后,根目录下一共 5 个文件夹:.teamcity、lib、mfc_detect、setup、src。还有 12 个文件:.editorconfig、.gitignore、.mailmap、appveyor.yml、AUTHORS.txt、change_toolset.ps1、CHANGES.txt、COPYING.txt、README.md、vld.ini、vld_vs14.sln、vld_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
该文件夹下有三个子文件夹:cppformat、dbghelp、gtest。

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
dbghelp 是 Windows 系统下的调试跟踪库,相关信息可见 关于 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
gtest 是 Google 开源的单元测试框架,仓库地址为 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.dll 的 new 函数序号(即 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 2008,VC版本号为VC9.0。 - 文件
vldmfc_detect_vs10.sln对应Visual Studio 2010,VC版本号为VC10.0。 - 文件
vldmfc_detect_vs11.sln对应Visual Studio 2012,VC版本号为VC11.0。 - 文件
vldmfc_detect_vs14.sln对应Visual Studio 2015,VC版本号为VC14.0。
5 文件夹 setup
这个文件夹中的文件主要用来打包 VLD 的安装程序,使用的安装制作软件为 Inno Setup 5.4.2,其官网为:Inno Setup。该文件夹下有两个子文件夹:dbghelp、editenv。以及 6 个文件:build_version.bat、license-free.txt、modpath.iss、version.h、vld-setup.iss、WizSmallImage.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-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.iss 是 Inno Setup 脚本,采用 Pascal 编写,用于 VLD 安装时修改 Path 环境变量。
5.6 文件 version.h
文件 version.h 存储 VLD 的版本信息,被 VLD 源码引用,详见 源码 vldint.h 第 40 行。
5.7 文件 vld-setup.iss
文件 vld-setup.iss 是 Inno Setup 生成的脚本,用于指导生成 VLD 安装器,默认情况下,在安装完成后会生成对应的卸载器 unins000.dat 与 unins000.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.props是VS的属性管理文件,被多个VLD测试工程所使用,使用介绍可参考 .vcxproj 和 .props 文件结构。copydlls.bat是批处理脚本,被用做为VLD测试工程的预先生成事件(Pre-Build Event),将vld.ini、vld_xx.dll、vld_xx.pdb、dbghelp.dll、Microsoft.DTfW.DHL.manifest这5个依赖文件复制到指定目录。
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 测试工程,用来测试:当使用不同的内存分配函数(例如 malloc、calloc、placement 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 2008,VC版本号为VC9.0。 - 文件
vldconsole_vs10.sln对应Visual Studio 2010,VC版本号为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 测试工程,用来测试:当内存分配函数与释放函数不匹配(例如 malloc 与 delete 配对使用)、分配的堆与释放的堆不匹配时,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 动态库时,VLDEnableModule 及 VLDResolveCallstacks 功能是否正常,以及当在多线程中加载动态库时,VLDGetLeaksCount 及泄漏检测功能是否正常。被测的动态加载用法详见 LoadTests.h 文件 与 LoadTests.cpp 文件,被测的多线程用法详见 ThreadTests.h 文件 与 ThreadTest.cpp 文件。测试用例详见 dynamic_app.cpp 文件。这一测试工程需依赖 dynamic.dll 与 test_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 功能测试。库中用三种方式(malloc、new、new[])分别产生 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 2008,VC版本号为VC9.0。 - 文件
vldmfc_vs10.sln对应Visual Studio 2010,VC版本号为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 功能测试。库中用三种方式(new、CString initialisation with string、new[])产生一共 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 创建线程)、多种分配方式(例如 new、malloc、HeapAlloc 等)、不同递归深度、随机分配内存、随机释放内存时,VLD 能否按需正确检测出内存泄漏(测试过程中也会随机地配对使用 VLDDisable 与 VLDRestore 忽略一些泄漏,详见 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.dll 与 vld_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.vcxproj 与 vld.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 库项目、测试项目、示例项目,文件名中的 wo 是 without 的简写,表示没有 MFC 相关的测试项目(除了没有 test_mfc、ComTest、vldmfc 这三个项目外,其他地方与 vld_vs14.sln 一样),如下图所示:

【Visual Leak Detector】源码文件概览的更多相关文章
- 使用Visual Leak Detector检测内存泄漏[转]
1.初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题 ...
- vld(Visual Leak Detector) 内存泄露检测工具
初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复 杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题.内存 ...
- VS2017 编译 Visual Leak Detector + VLD 使用示例
起因 一个Qt5+VS2017的工程,需要进行串口操作,在自动时发现一段时间软件崩溃了,没有保存log,在 debug 的时候发现每运行一次应用占据的内存就多一点,后来意识到是内存泄漏了.这个真是头疼 ...
- 使用Visual Leak Detector for Visual C++ 捕捉内存泄露
什么是内存泄漏? 内存泄漏(memory leak),指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段 ...
- 《UNIX网络编程(第3版)》unp.h等源码文件的编译安装
操作系统:Mac OS X 10.11.5 1.下载书中的源代码:点击下载 2.切换到解压后的目录 unpv13e,先查看下 README,依次执行: ./configure cd lib make ...
- [C/C++] 各种C/C++编译器对UTF-8源码文件的兼容性测试(VC、GCC、BCB)
在不同平台上开发C/C++程序时,为了避免源码文件乱码,得采用UTF-8编码来存储源码文件.但是很多编译器对UTF-8源码文件兼容性不佳,于是我做了一些测试,分析了最佳保存方案. 一.测试程序 为了测 ...
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector
那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...
- Visual Leak Detector 2.2.3 Visual C++内存检测工具
Visual Leak Detector是一款免费的.健全的.开源的Visual C++内存泄露检测系统.相比Visual C++自带的内存检测机制,Visual Leak Detector可以显 ...
- Erlang千万级用户游戏框架(Openpoker)源码文件分析清单
openpoker源码 erlang写的网游服务器源码,OpenPoker是一个大型多人扑克网游,内建支持了容错能力,负载平衡和无限制的规模大小.本文是openpoker源码文件功能的一个清单式说明: ...
- C++ 多源码文件简单组织
C++ 多源码文件简单组织 基本上和C的是一样的,只不过C++的方法要在类中声明.看一个简单实例.ainimal.h 类里面对外公开的信息. 点击(此处)折叠或打开 #ifndef _ANIMAL_ ...
随机推荐
- ddddd
项目二阶段总结 账户微服务 短信发送 1.压测发现问题 首先对短信smscomponent的send方法在test单元测试类中测试,不是真的发短信测试,可以建立请求开始和结束的时间戳来确定请求的耗时. ...
- Swagger详解
1.Swagger的介绍 1.1 Swagger的工作原理 1.系统启动,扫描到api工程中的Swagger2Configuration类 2.在此类中指定了包路径,会找到在此包下及子包下标记有@Re ...
- tensorboard可视化详细
tensorboard可视化详细 2019-09-06 tensorboard可视化的官方学习链接 1.tensorboard可视化的用途 首要的目的是记录tensorflow的Graph,tenso ...
- 剑指Offer2---------替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 重点: ...
- linux 数据卷磁盘管理
新加磁盘如何创建逻辑分区 查看命令 lvs vgs pvs 1: 新建一个分区(partition)fdisk /dev/sdb 2:创建PV(物理卷)pvcreate /dev/sdb1pvs或 ...
- linux 安装 jupyter notebook
虚拟机使用的是ubuntu系统 直接遇见一个问题 E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/ ...
- 为什么对1e9 + 7取模
在刷题的时候,很多题目答案都要求结果对1e9 + 7取模 刚开始我非常不理解,为什么要取模,取模难道结果不会变吗? 答案是结果会变,但因为原本需要得出的答案可能超出int64的范围,比如他叫你计算50 ...
- shell多进程并发数控制
在批量执行任务时,单进程执行速度太慢,使用&不加数量控制,又担心资源占用过多,导致宕机等问题,因此我们需要控制并发进程的数量,保证效率的同时,保证资源占用不会太高. 其中一个解决思路是利用简单 ...
- GameObject.Find()、Transform.Find()查找游戏对象
GameObject.Find 按广度进行查找 GameObject.Find("GameObject"); GameObject.Find("GameObject/Ch ...
- 记一个线上问题,selectById查询id出现两条数据问题
查询selectById(),查询1529665444035670017(Long)结果出现两条数据: id:1529665444035670017,和id:1529665444035670018 调 ...