说明

使用 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.datunins000.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.dllVisual Studio 2015Releasex64 模式编译源码生成。
  • 【文件 12】安装目录文件 .\bin\Win64\vld_x64.pdbVisual Studio 2015Releasex64 模式编译源码生成。
  • 【文件 13】安装目录文件 .\lib\Win64\vld.libVisual Studio 2015Releasex64 模式编译源码生成。
  • 【文件 14】安装目录文件 .\bin\Win32\vld_x86.dllVisual Studio 2015ReleaseWin32 模式编译源码生成。
  • 【文件 15】安装目录文件 .\bin\Win32\vld_x86.pdbVisual Studio 2015ReleaseWin32 模式编译源码生成。
  • 【文件 16】安装目录文件 .\lib\Win32\vld.libVisual Studio 2015ReleaseWin32 模式编译源码生成。

2. 源码编译生成 VLD 库

使用 Visual Studio 2015 打开源码根目录下的 vld_vs14.sln 或者 vld_vs14_wo_mfc.sln,当仅用于生成 VLD 库时,这两个解决方案的生成结果是一样的,详见本人另一篇博客 【VLD】源码文件概览。打开后,下拉构建配置框,可以看到有 6 种配置可供选择:DebugDebug_StaticCrtDebug_VldReleaseDebug_VldRelease_StaticCrtReleaseRelease_StaticCrt,他们的区别在于链接的运行库版本不同(详见 项目属性 -> C/C++ -> 代码生成 -> 运行库),以及是否启用优化。

打开 配置管理器,下拉查看不同的 活动解决方案配置,发现除 DebugDebug_StaticCrt 模式外,其余 4 种配置下 vld 的配置都为 Release。因此解决方案的配置选项选择除 DebugDebug_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,也不需要更改任何代码。

【Visual Leak Detector】源码编译 VLD 库的更多相关文章

  1. linux下JUCE源码编译依赖库

    JUCE 源码https://github.com/julianstorer/JUCE 想在ubuntu下编译需要提前安装以下依赖库 sudo apt-get install mesa-common- ...

  2. Ubuntu 16.04源码编译boost库 编写CMakeLists.txt | compile boost 1.66.0 from source on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/d5d4a460/,欢迎阅读! compile boost 1.66.0 from source on ubuntu 16.04 G ...

  3. Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

    那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...

  4. Cocos性能优化工具的开发介绍Visual Studio内存泄漏检测工具——Visual Leak Detector

    然后,Windows下有什么好的内存泄漏检測工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检測功能.我们能够使用第三方工具Visual Leak Detector(下面简 ...

  5. VisualStudio 怎么使用Visual Leak Detector

    VisualStudio 怎么使用Visual Leak Detector 那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测 ...

  6. Visual Leak Detector 2.2.3 Visual C++内存检测工具

      Visual Leak Detector是一款免费的.健全的.开源的Visual C++内存泄露检测系统.相比Visual C++自带的内存检测机制,Visual Leak Detector可以显 ...

  7. 使用Visual Leak Detector for Visual C++ 捕捉内存泄露

    什么是内存泄漏? 内存泄漏(memory leak),指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段 ...

  8. VS2017 编译 Visual Leak Detector + VLD 使用示例

    起因 一个Qt5+VS2017的工程,需要进行串口操作,在自动时发现一段时间软件崩溃了,没有保存log,在 debug 的时候发现每运行一次应用占据的内存就多一点,后来意识到是内存泄漏了.这个真是头疼 ...

  9. vld(Visual Leak Detector) 内存泄露检测工具

    初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复 杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题.内存 ...

  10. 使用Visual Leak Detector检测内存泄漏[转]

      1.初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题 ...

随机推荐

  1. 【转载】MSVC中C++ UTF8中文编码处理探究

    字符集 先说一个名词:字符集,没听过的先百度一下,其实就是一种将字符编码的格式,像我们常说的ASCII,UTF8,GBK都是常用的字符集. 首先要清楚,从你在编辑器里输入一个UTF8汉字开始,到最终在 ...

  2. Selenium常见方法

    1.打开和关闭浏览器  打开浏览器   driver=webdriver.Ie()   driver=webdriver.Chrome()   driver=webdriver.Firefox() ...

  3. 6.Vue路由

    一.路由的基本概念与原理 路由是一个广义与抽象的概念,路由的本质就是对应关系 在开发中,路由分为: (1) 后端路由 (2) 前端路由 1.1 路由 1. 后端路由(根据不同的URL地址分发不同的资源 ...

  4. cookies、session、token

    cookies 当登录的时候这个set-cookies就是把cookies的数据保存到了客户端的application/cookies中 session 表示为会话,存放在服务端,当用户登录,服务器就 ...

  5. jquery 选择器 或 且

    jquery选择器具有很强大的功能,基本的使用方法随处可见,jquery还提供了更为方便的使用. 且:$("div[id^='AAA_']div[id$='_DIV']"),此选择 ...

  6. Unity 2D Sprite 俯视角渲染顺序设置

    今天结合网上的一个教程复习了一下Unity中2D俯视角游戏的渲染顺序设置. 首先是在Hierachy中的摆放顺序,靠下的物体渲染顺序靠后: 然后是Sprite Renderer组件,可以通过组件中的S ...

  7. 转贴:阿里云ESC-centos7服务器小白搭建FTP教程

    1. 安装vsftpd yum -y install vsftpd 2. 检查vsftpd是否安装成功 rpm -q vsftpd vsftpd-3.0.2-29.el7_9.x86_64 # 检查方 ...

  8. Docker基本概念及命令

    1.Docker三个重要概念:仓库(Repository).镜像(image)和容器(Container) Docker基本用法: docker  命令关键字(COMMAND) 一系列的参数 dock ...

  9. 提供离线chrome谷歌浏览器插件crx的网站有

    crx4:http://www.crx4.com/ 极简插件:https://chrome.zzzmh.cn/index 扩展迷:https://www.extfans.com/ 浏览器插件下载中心: ...

  10. podman 入门实战

    一入编程深似海,从此节操是路人. 最近使用podman,就想着写一篇总结性的笔记,以备后续参考.就如同写代码,不写注释,过了一段时间可能会想这是我写的吗?不会吧,还要理一下逻辑才能读懂,不利于后期维护 ...