Определите не освобожденную память во время выполнения

Как лучше всего определить память, не освобожденную должным образом во время выполнения? Я знаю несколько программ, которые идентифицируют выделенную и не освобожденную (просочившуюся) память при закрытии приложения. Но моя проблема, кажется, заключается в том, что во время выполнения программы (возможно, поток) создает некоторые объекты, которые не освобождаются, хотя они должны быть после того, как система выполнит "работу".

Поддержание работоспособности системы со временем накапливается. Но когда программа выключается, кажется, что память освобождается правильно и, следовательно, никогда не сообщается как утечка в MadEx, за исключением того, что я использую в данный момент.

Как лучше всего определить, что выделяет эту память каждый раз, когда запускается "работа", и не освобождать ее до завершения программы? Это довольно большая серверная система с около 1 миллиона строк кода, несколькими подпроектами DLL и несколькими запущенными потоками (40-50).

Возможно, есть какая-то система, которая могла бы идентифицировать выделенные объекты, которые были живы дольше, чем X мин. Допустим, выбрано 60 минут, и система вышла из строя. Тогда эта информация может быть использована, чтобы найти многие из этих долгоживущих объектов и исследовать их?

2 ответа

Решение

В итоге я попробовал пробную версию Softwareverify C++ Memory Validator.

Он работал точно так же, как я хотел, и мог предоставить временную шкалу распределения памяти и т. Д., Чтобы позволить мне определить, что накапливалось с течением времени и как долго он был жив. Используя это, я смог определить проблему и исправить ее.

Если вы используете C++ и Visual Studio, я думаю, что эта ссылка полезна. Вы можете _CrtMemCheckpoint и CrtMemDumpStatistics, когда вам нужно.

Другие вопросы по тегам