说明

使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。

1. 使用前的准备

参考本人另一篇博客 安装 Visual Leak Detector 下载 vld-2.5.1-setup.exe 并按步骤安装 VLD。这一种使用方式的特点是,在一台电脑上安装完成后,需在项目 pro 文件中指明库及头文件的路径,然后在 mian.cpp 文件中 #include "vld.h"。当把项目拷贝到别的电脑上编译运行时,需要确保该电脑已经使用 vld-2.5.1-setup.exe 安装了 VLD,并更改项目 pro 文件中指明的相关路径。

2. 在 QT 中使用 VLD

我的 VLD 安装目录为 D:\Program Files (x86)\Visual Leak Detector

2.1 在项目 .pro 文件中指明路径

在项目对应的 pro 文件中指明 VLD 的 include 目录和 lib 文件,pro 文件中添加如下代码:

win32{
INCLUDEPATH += $$quote(D:\Program Files (x86)\Visual Leak Detector\include)
DEPENDPATH += $$quote(D:\Program Files (x86)\Visual Leak Detector\include) CONFIG(debug, debug | release) {
contains(QT_ARCH, x86_64){
LIBS += -L$$quote(D:\Program Files (x86)\Visual Leak Detector\lib\Win64) -lvld
}else{
LIBS += -L$$quote(D:\Program Files (x86)\Visual Leak Detector\lib\Win32) -lvld
}
}
}

2.2 在 main.cpp 文件中添加头文件

在项目的 main.cpp 文件中,添加头文件:

#include "vld.h"

选择 MSVC 32bit 或者 MSVC 64bit 编译器,选择 Debug 模式,编译运行,就可以正常使用了。

2.3 无内存泄漏时的输出报告

程序运行结束后,若没有检测到内存泄漏,VLD 会输出以下 4 行报告:

Visual Leak Detector read settings from: D:\Program Files (x86)\Visual Leak Detector\vld.ini
Visual Leak Detector Version 2.5.1 installed.
No memory leaks detected.
Visual Leak Detector is now exiting.

2.4 有内存泄漏时的输出报告

程序运行结束后,若检测到内存泄漏,VLD 会输出以下报告(本例中出现一处内存泄漏):

Visual Leak Detector read settings from: D:\Program Files (x86)\Visual Leak Detector\vld.ini
Visual Leak Detector Version 2.5.1 installed.
WARNING: Visual Leak Detector detected memory leaks!
---------- Block 1 at 0x00000000977910B0: 20 bytes ----------
Leak Hash: 0x0A94032F, Count: 1, Total 20 bytes
Call Stack (TID 12424):
ucrtbased.dll!malloc()
f:\dd\vctools\crt\vcstartup\src\heap\new_array.cpp (16): testVLD.exe!operator new[]()
e:\cworkspace\qt 5.9.0\qtdemo\testvld\main.cpp (12): testVLD.exe!main() + 0xA bytes
f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (75): testVLD.exe!invoke_main()
f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (264): testVLD.exe!__scrt_common_main_seh() + 0x5 bytes
f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (309): testVLD.exe!__scrt_common_main()
f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp (17): testVLD.exe!mainCRTStartup()
KERNEL32.DLL!BaseThreadInitThunk() + 0x14 bytes
ntdll.dll!RtlUserThreadStart() + 0x21 bytes
Data:
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD ........ ........ Visual Leak Detector detected 1 memory leak (72 bytes).
Largest number used: 72 bytes.
Total allocations: 72 bytes.
Visual Leak Detector is now exiting.

3. 无法正常使用的可能原因

  • 检查编译器版本,VLD 无法在 minGW 下使用,只能使用 MSVC 编译器。
  • 检查是否是 Debug 模式,VLD 无法直接在 Release 模式下使用。
  • 检查环境变量是否正确配置,环境变量是 VLD 安装程序自动配置的,但是若在安装时没有勾选自动配置,会导致环境变量缺失,查看 Path 这一系统变量中是否添加了 VLD 的 bin 路径(我的是 D:\Program Files (x86)\Visual Leak Detector\bin\Win32D:\Program Files (x86)\Visual Leak Detector\bin\Win64 这两个)。
  • 在 VLD 安装成功后,是否已经重启了 QT,因为要加载 VLD 安装时新添的环境变量,若没重启 QT,可能找不到 VLD 的依赖环境。
  • 清除上一次的编译文件,重新编译运行一下。
  • 若路径中存在空格,添加库时一定要使用 $$quote() 将路径括起来,否则路径解析不正确,例如上面写的 INCLUDEPATH += $$quote(D:\Program Files (x86)\Visual Leak Detector\include)

【Visual Leak Detector】在 QT 中使用 VLD(方式二)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. VisualStudio 怎么使用Visual Leak Detector

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

  8. Visual Leak Detector原理剖析

    认识VLD VLD(Visual Leak Detector)是一款用于Visual C++的开源内存泄漏检测工具,我们只需要在被检测内存泄漏的工程代码里#include “vld.h”就可以开启内存 ...

  9. 关于Visual Leak Detector的配置与使用 (测试vector 引起的内存泄漏问题)

    之前在做一个音频特征提取的批量处理程序,老是出现内存泄露问题,用Visual Leak Detector(VLD)工具做了下检测,检测出了一些问题,解决后还是会有问题.之后继续排查,因为我的代码中,大 ...

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

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

随机推荐

  1. Morris遍历以及Morris前序中序后序遍历实现

    #include<iostream> using namespace std; struct TreeNode{ int val; TreeNode* right; TreeNode* l ...

  2. 记一次ajax文件上传

    一个新需求提交页面. 在页面提交的时候,使用的是,先上传文件再上传表单 在这里需要返回表单存储的文件地址,需要上传.所以.在上传文件之后会返回存储的地址. 这里犯的一个错误: 往input 的type ...

  3. uiautomator2自动化工具的下载与安装

    前言: 相信很多使用appium做过APP自动化的人都深有感触: 1,安装麻烦,配置环境可能会难道不少人 2,appium运行慢.时间长 3,uiautomatorviewer定位元素时得关掉appi ...

  4. rabbitMq安装 - docker

    安装rabbitmq 参考网站:https://www.rabbitmq.com/download.html 方式一: 获取rabbit镜像: docker pull rabbitmq:managem ...

  5. maven父子项目,由于pom文件中的<packaging>pom</packaging>导致报数据源配置错误

    啊啊啊~~~ 又是踩坑的一天!!! 我在子模块中进行开发,然后子模块的pom文件中也写了<packaging>pom</packaging>导致报数据源配置错误.具体内容如下图 ...

  6. php后端遇到的问题

    1.用文件记录日志,会有并发问题

  7. SourceMap解析

    前端发展至今已不再是刀耕火种的年代了,出现了typescript.babel.uglify.js等功能强大的工具.我们手动撰写的代码一般具有可读性,并且可以享受高级语法.类型检查带来的便利,但经过工具 ...

  8. SaltStack学习笔记

    SaltStack三大功能: 1. 远程执行 2. 配置管理  (状态) 3.云管理 运维三板斧:监控.执行.配置 四种运行方式: 1.Local 2. Minion/Master   C/S架构 3 ...

  9. Jmeter-接口测试(一)

    一.接口测试分类 内部接口 外部接口--被测系统调用外部     --系统对外部提供的接口 接口测试重点:接口参数传递的正确性.接口功能的正确性.输出结果正确性.各种异常容错处理.权限控制.分页.调用 ...

  10. Docker-compose安装Wordpress

    Docker-compose实战Wordpress 96 iXiAo9 2019.01.10 18:54 字数 82 阅读 105评论 0喜欢 0 Docker-compose实战Wordpress ...