#c #windows #memory-leaks
#c #Windows #утечки памяти
Вопрос:
У меня есть 32-разрядное приложение msvc , запущенное в производственной среде, в которой происходит утечка памяти. В основном он будет работать в течение нескольких часов, пока не израсходует все 3 ГБ адресуемой памяти и не завершится.
Я подумал, что если бы существовал способ приостановить процесс и сбросить его память на диск, я мог бы проанализировать память, чтобы увидеть, есть ли какие-либо закономерности для утечки.
Не уверен, возможно ли это вообще. Я просто бросаю науку на стену и смотрю, что прилипает.
Некоторые входные данные были бы весьма признательны.
Комментарии:
1. Вы не можете запустить его в конфигурации отладки?
2. Возможно, но я бы предпочел запустить рабочий exe-файл, чтобы больше не вводить никаких переменных.
Ответ №1:
Это чрезвычайно просто, если вы уверены, что у вас есть какие-то способы найти что-то полезное путем анализа кучи процессов. Все используемые инструменты бесплатны, а инструкции приведены здесь: Файлы дампа
Тем не менее, если бы вы могли просто запустить отладочную сборку на некоторое время, CRT сделает всю работу за вас. Смотрите раздел Поиск утечек памяти с использованием библиотеки CRT
Комментарии:
1. «Дамп процесса пользовательского режима» — это именно то, что я искал. Спасибо! Я попробую это сделать, когда вернусь к работе. microsoft.com/downloads/en /…
Ответ №2:
Для действительно быстрого способа Purify или DevPartner Studio обычно укажут вам прямо на утечку и покажут вам трассировку от места, где она была выделена, до места утечки. Это также выявит немало других ошибок.
Использование встроенных инструментов CRT прекрасно, если у вас есть на это время. Эти инструменты стоят денег, поэтому я полагаю, что вы сопоставляете затраты времени, которые потребуются для их отслеживания с помощью дампов памяти CRT, со стоимостью лицензии.
При разработке Windows это помогло быстро разобраться со многими утечками. Я предпочитаю DevPartner, а не Purify, но, вероятно, потому, что я использовал Purify только под Linux и нашел способ его работы слишком громоздким.