Как лучше всего определить память, которая не была правильно выпущена во время выполнения? Я знаю несколько программ, которые идентифицируют выделенную и не освобожденную (пропущенную) память, когда приложение закрывается. Но моя проблема заключается в том, что во время выполнения программы (возможно, поток) создаются некоторые объекты, которые не освобождаются, хотя они должны быть после того, как система будет выполнена с «работой».Идентифицировать незапущенную память во время выполнения
Сохранение системы, которая работает с течением времени. Но когда программа выключается, память, похоже, правильно освобождается и, таким образом, никогда не сообщается как утечка в MadExcept, которую я использую в данный момент.
Как лучше всего определить, что выделяет эту память каждый раз, когда выполняется «работа», а не освобождая ее до завершения программы? Это довольно большая серверная система с примерно 1 млн строк кода, несколько подпроектов DLL и несколько потоков (40-50).
Возможно, есть система, которая могла бы идентифицировать выделенные объекты, которые были живы дольше, чем X мин. Предположим, что выбрано 60 минут, и система оставила работу. Затем эту информацию можно было бы использовать для поиска многих из этих длинных живых объектов и их исследования?
Возможно, вы можете использовать [Boehm's GC] (http://www.hboehm.info/gc/), по крайней мере, в своем режиме детектора утечки. –
Я не думаю, что есть вспомогательная программа, которая учитывает то, что должен был рассмотреть программист. Пока память доступна, ничто не может сделать вывод о том, что объект должен быть удален. – 101010
40two: Я понимаю, что это проблематично. Если бы я построил это с нуля, я бы, вероятно, лучше понял, что может вызвать его. Я думал, что, возможно, есть программа, где вы можете фильтровать и получать как список всех объектов, которые были живы более 60 минут, например. Если вы видите грузы того же типа с длительным сроком службы, вы можете это исследовать. – inquam