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

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

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

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

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

-1

Решение

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

0

Другие решения

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

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

0

По вопросам рекламы [email protected]