После многих лет работы над универсальной библиотекой C ++ с использованием компилятора Microsoft MSVC в Visual Studio мы теперь переносим ее на 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
Каждое распределение памяти выполняется с помощью этого НОВОГО макроса. Всякий раз, когда процесс, использующий нашу библиотеку, завершается, любые утечки памяти (блоки, которые не были выделены) сообщаются на консоли вместе с файлом и строкой #, где память была первоначально выделена.
Мне нравится то, что мне не нужно активно «работать с инструментом повышения производительности» или иным образом указывать, что я ищу утечки. Утечки сообщаются мне в ходе обычной разработки, каждый раз, когда процесс завершается.
Теперь, когда мы переходим в мир GCC, я обнаружил, что инструменты обнаружения утечек памяти, многие из которых довольно сложны, требуют, чтобы я явно указал, что я нахожусь в режиме поиска утечек. Моя IDE - это Xcode, и я изучил некоторые инструменты выделения / обнаружения утечек (например, Instruments и MallocDebug), но признаю, что еще не потратил время, чтобы полностью разобраться с ними. Меня все время отталкивает тот факт, что я на самом деле должен указать, что я ищу утечку раньше времени, вместо того, чтобы автоматически получать уведомление об этом.
Я использую Xcode 3.2, и я слышал, что теперь есть отличная интеграция с инструментом статического анализа, но опять же я не изучал это. Я ищу некоторое представление о том, что мои варианты. Существует ли сопоставимый механизм, встроенный в GCC и / или XCode? Есть ли простая сторонняя библиотека или инструмент, который выполняет самые основные функции, которые я знаю и люблю? Или я должен смириться с этим и изучить новый способ ведения дел?