После многих лет работы над библиотекой С++ общего назначения с использованием компилятора 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, и я изучил некоторые инструменты выделения/утечки (например, инструменты и MallocDebug), но я признаю, что не потратил времени, чтобы полностью окунуться в них. Я все время откладываю на то, что на самом деле мне нужно указать, что я ищу утечку раньше времени, вместо того, чтобы автоматически получать уведомление об этом.
Я использую Xcode 3.2, и я слышу, что теперь есть отличная интеграция со средством статического анализа, но опять же я не рассматривал это. Я ищу какое-то представление о моих вариантах. Есть ли сопоставимый механизм, встроенный в GCC и/или Xcode? Есть ли простая сторонняя библиотека или инструмент, который выполняет те самые основные функции, которые я знаю и люблю? Или я должен сосать его и узнать новый способ делать что-то?