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

文章目录

  • 前言
  • crtdbg
    • 使用
    • 原理
    • 例子
  • Visual Leak Detector(VLD)
  • Checkpoint/DumpStatistics
  • Windbg
  • 腾讯WeTest - TMM
  • IBM purify
  • VMMap
  • Application Verifier
  • Cppcheck

前言

本文主要记录 Windows 下内存泄漏检测工具;Linux 下首选必须是 Valgrind 啊。

目前待检测的程序采用的是 Qt,由于Qt本身的半自动内存管理机制,因此好用的检测工具真的不容易找…详细可看该篇 Qt浅谈之一:内存泄露(总结)

crtdbg

主要针对 Win32 或者 Qt 程序,debug 模式

使用

#define _CRTDBG_MAP_ALLOC
#include 
#include 

// 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();
    

C/C++ 内存泄漏检测工具汇总_第1张图片

Checkpoint/DumpStatistics

没试过,貌似主要是MFC?
VC++内存泄漏检测方法(2):Checkpoint/DumpStatistics

Windbg

看着好像还不错,貌似 32/64 bit版本问题,我无法挂上待调试的程序~
C/C++ 内存泄漏检测工具汇总_第2张图片

腾讯WeTest - TMM

下载地址

软件退出时检测内存泄漏的工具。不知道为何程序点击运行后,状态也一直为 null…

已联系开发团队,但还没有回应~

IBM purify

安装及破解

使用

一度给予厚望,最后发现…V7.0.1.0+ 才开始支持64bit 的程序。

但是网络上只有V7.0.0.0的安装包!

使用 IBM Rational PurifyPlus

VMMap

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

下载地址

使用见 VMMAP定位内存泄露
C/C++ 内存泄漏检测工具汇总_第3张图片

Application Verifier

微软推出的代码验证工具,可以发现程序代码中难以察觉的错误。
C/C++ 内存泄漏检测工具汇总_第4张图片

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

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

个人认为并不好用!

Cppcheck

下载地址

静态代码检测工具,实测还行,有点用。
C/C++ 内存泄漏检测工具汇总_第5张图片

你可能感兴趣的:(C/C++,QT,内存泄漏检测,工具,C++)