C/C++ 内存泄漏检测工具汇总

前言

本文主要记录 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 2015Release 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的安装包!

使用 IBM Rational PurifyPlus

VMMap

VMMap是一个进程虚拟和物理内存分析实用程序。可以获得比任务管理器更详细的数据!

下载地址

使用见 VMMAP定位内存泄露
在这里插入图片描述

Application Verifier

微软推出的代码验证工具,可以发现程序代码中难以察觉的错误。
在这里插入图片描述

其工作机制可见 Application Verifier使用起步

如果不使用了的话记得移除程序,否则启动程序时你会发现系统非常卡,内存占用非常大…

个人认为并不好用!

Cppcheck

下载地址

静态代码检测工具,实测还行,有点用。
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值