Сброс памяти процесса на диск для анализа на предмет утечек памяти

#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 и нашел способ его работы слишком громоздким.