文章目录
前言
本文主要记录 Windows
下内存泄漏检测工具;Linux
下首选必须是 Valgrind
啊。
目前待检测的程序采用的是 Qt,由于Qt本身的半自动内存管理机制,因此好用的检测工具真的不容易找…详细可看该篇 Qt浅谈之一:内存泄露(总结)
crtdbg
主要针对 Win32 或者 Qt 程序,debug
模式
使用
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
// main 开始的地方加上:
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
_CrtSetBreakAlloc(1472); //1472为上面内存泄漏的块号
// 注意:或者不在main开始的地方加上,而是在main结尾加上:
_CrtDumpMemoryLeaks();
原理
VC++内存泄漏检测方法(4):【第1篇的补充说明】详解基于Crt的内存泄漏检测
例子
LiteIDE
是使用Qt写的应用程序,里面大量应用了 crtdbg
内存泄露检测的方法
GitHUb-LiteIDE
Visual Leak Detector(VLD)
貌似仅支持 Visual Studio 2008
~ Visual Studio 2015
。Release
Debug
模式均可!
对于 Debug
模式只在项目中添加动态库(个人不喜欢配置环境变量的做法),程序退出的时候就会提示可能存在内存泄漏的地方啦~
对于 Release
模式使用方法如下:
- 同
Debug
版本在VC中配置好VLD的相关信息 - 拷贝
Visual Leak Detector\bin\Win64
目录下所有的文件和vld.ini
到工程目标路径下 - 在程序入口处的cpp中,定义强制检测宏和包含vld头文件
#define VLD_FORCE_ENABLE #include "vld.h"
- 在程序启动和退出时,分别增加以下函数调用
VLDGlobalEnable(); VLDReportLeaks(); //some code... VLDGlobalDisable();
Checkpoint/DumpStatistics
没试过,貌似主要是MFC?
VC++内存泄漏检测方法(2):Checkpoint/DumpStatistics
Windbg
看着好像还不错,貌似 32/64 bit版本问题,我无法挂上待调试的程序~
腾讯WeTest - TMM
软件退出时检测内存泄漏的工具。不知道为何程序点击运行后,状态也一直为 null…
已联系开发团队,但还没有回应~
IBM purify
使用
一度给予厚望,最后发现…V7.0.1.0+ 才开始支持64bit 的程序。
但是网络上只有V7.0.0.0的安装包!
VMMap
VMMap是一个进程虚拟和物理内存分析实用程序。可以获得比任务管理器更详细的数据!
使用见 VMMAP定位内存泄露
Application Verifier
微软推出的代码验证工具,可以发现程序代码中难以察觉的错误。
其工作机制可见 Application Verifier使用起步
如果不使用了的话记得移除程序,否则启动程序时你会发现系统非常卡,内存占用非常大…
个人认为并不好用!
Cppcheck
静态代码检测工具,实测还行,有点用。