【发布时间】:2010-12-18 04:22:25
【问题描述】:
在 Visual Studio 中使用 Microsoft MSVC 编译器开发通用 C++ 库多年后,我们现在将其移植到 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
每个内存分配都是使用这个 NEW 宏完成的。每当使用我们库的进程终止时,控制台上都会报告任何内存泄漏(尚未释放的块)以及最初分配内存的文件和行#。
我喜欢的部分是我不必主动“使用性能工具运行”或以其他方式表明我正在寻找泄漏。在常规开发过程中,每次进程终止时都会向我报告泄漏。
现在我们正在转向 GCC 世界,我发现内存泄漏检测工具(其中许多非常复杂)要求我明确指出我处于泄漏搜寻模式。我的 IDE 是 Xcode,我研究了一些分配/泄漏检测工具(如 Instruments 和 MallocDebug),但我承认我还没有花时间完全了解它们。我一直因为我必须提前指定我正在寻找泄漏而不是自动收到警报这一事实而感到厌烦。
我正在使用 Xcode 3.2,并且听说现在与静态分析工具进行了很好的集成,但我再次没有对此进行研究。我正在寻找一些关于我的选择的想法。 GCC 和/或 Xcode 中是否有类似的机制?是否有一个简单的第三方库或工具可以执行我所知道和喜爱的非常基本的功能?还是我应该接受它并学习新的做事方式?
【问题讨论】:
标签: c++ c xcode gcc memory-leaks