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 <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的安裝包!
使用 IBM Rational PurifyPlus
VMMap
VMMap是一個進程虛擬和物理內存分析實用程序。可以獲得比任務管理器更詳細的數據!
下載地址
使用見 VMMAP定位內存泄露
 
Application Verifier
微軟推出的代碼驗證工具,可以發現程序代碼中難以察覺的錯誤。
 
其工作機制可見 Application Verifier使用起步
如果不使用了的話記得移除程序,否則啟動程序時你會發現系統非???#xff0c;內存占用非常大…
個人認為并不好用!
Cppcheck
下載地址
靜態代碼檢測工具,實測還行,有點用。
 
總結
以上是生活随笔為你收集整理的C/C++ 内存泄漏检测工具汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 提高文档编写能力
- 下一篇: cv::Mat属性 step, size
