Есть много способов проверить программы на утечку памяти. В итоге вы получаете список указателей на утечки блоков памяти, но есть ли хороший способ узнать больше информации по каждому блоку? Например: если я знаю, что объект является строкой, фактическое значение строки может значительно упростить поиск утечки.
Есть ли в RTTI бэкдор, делающий это возможным?
Проблемы, которые необходимо решить, заключаются в том, что к тому времени, когда вы получите указатели, исполняющая система уже находится в состоянии выключения, и вы получите необработанные указатели блоков памяти вместо указателей на объекты (хотя во многих случаях это может быть то же самое).





RTTI может вам не помочь. RTTI работает только в том случае, если классы имеют виртуальные методы, и не все распределения относятся к объектам с виртуальными методами.
Что вам действительно нужно сделать, так это каким-то образом прикрепить трассировку стека к вашим выделениям. Затем вы можете получить информацию о том, где была выделена память. Вы бы искали конструктор класса, если бы утечка памяти происходила из объектов.
В любом случае, есть ли что-то подобное? да. Бесплатная библиотека для Windows - Визуальный детектор утечки. Существуют более полнофункциональные коммерческие продукты (например, Bounds Checker и IBM Rational Purify), но VLD отлично работает. Это помогало мне бесчисленное количество раз обнаруживать утечки памяти.
Я использую valgrind --leak-check = full, что дает мне трассировка стека места размещения каждого утекшего блока. Эта информация путь более полезна, чем просто информация о типе. Valgrind (произносится как «Вэл усмехнулся») горные породы!
Как и Норман, я выступаю за Valgrind. Это действительно хороший совет для анализа трассировки стека!
Я использую его сборку в KDevelop.