【Visual Leak Detector】在 QT 中使用 VLD(方式二) - 木三百川
source link: https://www.cnblogs.com/young520/p/17241389.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
使用 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.iniVisual 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.iniVisual 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\Win32
和D:\Program Files (x86)\Visual Leak Detector\bin\Win64
这两个)。 - 在 VLD 安装成功后,是否已经重启了 QT,因为要加载 VLD 安装时新添的环境变量,若没重启 QT,可能找不到 VLD 的依赖环境。
- 清除上一次的编译文件,重新编译运行一下。
- 若路径中存在空格,添加库时一定要使用
$$quote()
将路径括起来,否则路径解析不正确,例如上面写的INCLUDEPATH += $$quote(D:\Program Files (x86)\Visual Leak Detector\include)
。
Recommend
-
11
MemoryLeakDetector 简体中文版说明 >>> MemoryLeakDetector is a native memory leak monitoring tool developed by Xigua video androi...
-
3
数途行者 | 致趣百川何润:数字化转型是三分事七分人 在全球范围内,营销自动化已经是一个价值 72.5 亿美元的产业,据 SharpSpring 的报告显示,未来几年营销自动化的年增长...
-
3
致趣百川何润:客户成功才是信任的基础 信任是商业世界的基石。线上化不断深入,人与人、人与组织、组织与组织,乃至产业与产业之间的连接、协作、运转都在发生着剧烈的改变。...
-
3
使用vld查看OPCode 2016-02-04 前几天翻译了一篇关于Zend引擎的文章,这篇文章主要是讲Zend引擎怎么执行PHP代码...
-
1
使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。 1. 使用前的准备 参考本人另一篇博客 安装 Visual Leak Detector 下载 vld-2.5.1-...
-
1
使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。 1. 使用方式 在 QT 中使用 VLD 的方法可以查看另外几篇博客: 本次测试使用的环境为:QT 5.9.2,MSVC 2015 32bit,Debug 模式,VLD 版本...
-
5
使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。 1. 使用方式 在 QT 中使用 VLD 的方法可以查看另外几篇博客: 本次测试使用的环境为:QT 5.9.2,MSVC 2015 32bit,Debug 模式,VLD 版本...
-
3
使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 配置文件中配置项 ForceIncludeModules 的使用方法。 同系列文章目录可见 《内存泄漏检测工具》目录
-
3
使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇对 VLD 1.0 源码做内存泄漏检测的思路进行剖析。同系列文章目录可见 《内存泄漏检测工具》目录 ...
-
0
使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。 本篇介绍如何在 VS 高版本中使用 vld2.5.1。同系列文章目录可见 《内存泄漏检测工具》目录
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK