Qt使用msvc编译器情况下,如何进行内存泄漏检测
背景:
使用Qt5版本,编译器选择msvc2017,在测试基于tinyxml2的二次封装类接口是否存在内存泄漏问题时,寻找内存泄漏检测工具。
问题:
寻找适合Qt + msvc编程的内存泄漏检测工具
尝试:
- VLD
Visual Leak Detector 是一款用于 C++ 的免费内存泄露检测工具,并且它在检测到内存泄露的同时还可以得到内存泄露时的调用堆栈以及所在文件和行号。
①下载:
下载地址:Visual Leak Detector | Enhanced Memory Leak Detection for Visual C++
②安装完成后,所在目录地址如下
③项目配置:
将vld头文件和库文件加到工程项目中。
我的程序代码是通过CMake的方式进行程序代码管理的,所以我在CMakeList.txt文件中加入了如下代码:
其中C:/Program Files (x86)/Visual Leak Detector 为vld的安装目录。
如果使用.pro文件的方式进行程序管理,则在pro文件中加入如下代码:
④编码实现,以及测试验证
在main.cpp文件中实现如下代码:
运行失败,程序直接崩溃(debug模式)。但是尝试使用release模式,运行正常,但是没有leak detect相关信息,没有leak相关信息属于正常现象,因为只有debug模式才会有leak信息输出。
猜测导致崩溃的原因是我的电脑上没有安装msvc的调试器。
- 在尝试1的基础上,进行安装msvc调试器,尝试解决问题
①打开控制面板 的 程序与功能
②选择Windows Software Development Kit - Windows .......,右键弹出菜单,选择“更改”,如下图:
③选择“Change”,点击“next”。
④勾选“Debugging Tools for Windows”,点击“Change”进行调试器安装。
安装完成后,运行Qt程序,正确输出leak信息,如下:
修改main代码
运行,输出如下leak信息:其中红色标注部分显示了造成内存泄漏的代码所在文件及行号信息。
总结:
使用Qt + msvc方式进行程序开发时,可使用vld(Visual Leak Detector)工具实现程序内存泄漏的检测,和错误定位。需要注意的是vld依赖于debug调试器工具,如若不然,程序在添加了<vld.h>后在debug模式下,会出现运行崩溃。