经过多年在通用的C++使用Visual Studio中的微软MSVC编译器库,我们现在将它移植到Linux/Mac OS X的工作(请为我们祈祷).我已经习惯了并且非常喜欢MSVC中简单的内存泄漏检测机制:
#ifdef DEBUG
#define _CRTDBG_MAP_ALLOC
#define NEW new( _NORMAL_BLOCK, __FILE__, __LINE__)
#include <stdlib.h>
#include <crtdbg.h>
#else
#define NEW new
#endif
Run Code Online (Sandbox Code Playgroud)
每个内存分配都使用此NEW宏完成.只要使用我们的库终止的过程,任何内存泄漏(即尚未解除分配块)与在内存最初分配的文件和行号一起通知的控制台上.
我喜欢的部分是我不必主动"运行性能工具"或以其他方式表明我正在寻找泄漏.每次进程终止时,都会在正常的开发过程中向我报告泄漏.
现在我们正在转向GCC世界,我发现内存泄漏检测工具,其中许多非常复杂,需要我明确表明我处于泄漏搜索模式.我的IDE是Xcode,我已经研究了一些分配/泄漏检测工具(比如Instruments和MallocDebug),但我承认我还没有花时间完全了解它们.事实上,我实际上必须提前说明我正在寻找泄漏,而不是自动提醒它.
我正在使用Xcode 3.2,我听说现在已经与静态分析工具进行了很好的集成,但我再也没有考虑过这个问题.我正在寻找一些关于我的选择的想法.GCC和/或Xcode中是否有类似的机制?是否有一个简单的第三方库或工具可以执行我所熟悉和喜爱的基本功能?或者我应该吮吸它并学习新的做事方式?