Отслеживание утечки памяти с помощью AppVerifier - PullRequest
3 голосов
/ 22 февраля 2011

У меня есть приложение на C ++ с минимальными утечками, и я бы хотел их исправить.Я использую AppVerifier для вывода утечек объектов и могу получить адреса и первые несколько байтов выделенной памяти.

К сожалению, этих первых байтов и необработанного адреса недостаточно для точного определения трассировки стека выделения,Есть ли способ получить полный дамп данных распределения и найти стек, который выделяет память?

Я мог бы поставить _ CrtSetBreakAlloc через номер утечки, но, к сожалению, это многопоточное приложение, и эти числа всплывают вверх и вниз.

У кого-нибудь есть предложение, что я могу попробовать?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2011

С помощью утилиты gflags вы можете включить сохранение информации стека вызовов (gflags + ust). Однако теперь ваши приложения будут работать медленнее и занимать больше памяти.

Примечание: честно говоря, я никогда не заставлял все эти утилиты Microsoft (отслеживание утечек в C-RunTime, Gflags, UMDH, AppVerifier, LeakDiag) делать именно то, что я хотел. В конце я просто написал свой собственный распределитель памяти, в который я могу добавить любую трассировку, какую захочу (стек вызовов, маркировка красной зоны, отложенное освобождение, проверка согласованности, ...).

1 голос
/ 22 февраля 2011

Вы можете попробовать использовать UMDH для отслеживания утечек памяти. Сначала вы должны использовать GFlags, чтобы включить сохранение трассировки стека вызовов всякий раз, когда выделяется память. В документации по UMDH указано, как его использовать.

Но недавно я наконец-то опробовал визуальный детектор утечек, и он отлично работает в моем чудовищном большом приложении. http://vld.codeplex.com

...