Файлы дампа
Дамп — это файл, который содержит snapshot процесса на момент создания дампа и может быть полезен для проверки состояния приложения. Дампы можно использовать для отладки приложения .NET, если к нему трудно подключить отладчик, например рабочую среду или среду CI. Использование дампов позволяет записать состояние проблемного процесса и изучить его без необходимости приостанавливать работу приложения.
Сбор дампов
Дампы можно собирать различными способами в зависимости от платформы, на которой выполняется приложение.
Дампы могут содержать конфиденциальные сведения, поскольку они могут содержать всю память выполняющегося процесса. При их обработке следует учитывать ограничения безопасности и рекомендации.
Часто задаваемые вопросы о сборе, анализе и других предостережениях дампа см. в разделе Дампы: вопросы и ответы.
- Переменные среды можно использовать для настройки приложения для сбора дампа при сбое.
- Вы можете собрать дамп, когда приложение еще не завершило работу. Например, если вы хотите проверить состояние приложения, в котором, на ваш взгляд, возникла взаимоблокировка, настройка переменных среды для сбора дампов при сбое не будет полезна, так как приложение все еще работает.
- dotnet-dump — это простое кроссплатформенное средство командной строки для сбора дампа. Некоторые другие средства отладчика, такие как Visual Studio или windbg , также имеют функции сбора дампов.
- Если вы запускаете приложение в рабочей среде или выполняете его распределенным образом (несколько служб, реплик), dotnet-monitor обеспечивает поддержку многих распространенных сценариев и нерегламентированных диагностических исследований, включая сбор дампов и исходящий трафик. Он позволяет собирать дампы удаленно или с условиями активации.
Анализ дампов
- Перейдите к разделу Отладка дампов Linux , чтобы получить сведения об анализе дампов, собранных в Linux.
- Перейдите к разделу Отладка дампов Windows , чтобы получить сведения об анализе дампов, собранных в Windows.
Анализ памяти
Вы можете выполнить анализ памяти в приложении, если память приложения продолжает увеличиваться, но вы не знаете, почему это так. В руководстве по отладке утечки памяти показано, как отладить утечку памяти с помощью инструментов dotnet CLI с командами dotnet-sos dumpheap и gcroot.
Анализ памяти Visual Studio можно использовать для диагностики утечки памяти в Windows.
См. также раздел
Узнайте больше о том, как использовать дампы для диагностики проблем в приложении .NET.
- В руководстве по отладке дампов Linux представлены пошаговые инструкции по отладке дампа, собранного в Linux.
- В руководстве по отладке взаимоблокировок описывается отладка взаимоблокировок в приложении .NET с помощью дампов.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Файлы дампов пользовательского режима
В этой статье вы получите общие сведения о файлах дампа в пользовательском режиме и о том, как их использовать для устранения ошибок и сбоев.
Сведения об анализе файла дампа см. в статье Анализ файла дампа в пользовательском режиме.
Типы файлов дампа пользовательского режима
Доступно несколько типов файлов аварийного дампа пользовательского режима. Различные типы файлов дампа делятся на две категории:
- Полные дампы пользовательского режима
- Минидампы
Вы можете получить значительный объем информации, проанализировав файл дампа. Однако ни один файл дампа не может предоставить сведения, полученные при отладке сбоя с помощью отладчика.
Полные дампы пользовательского режима
Полный дамп пользовательского режима — это базовый файл дампа в пользовательском режиме. Полный файл дампа пользовательского режима включает:
- Весь объем памяти процесса.
- Исполняемый образ программы.
- Таблица дескрипторов.
- Другие сведения, помогающие отладчику восстановить память, используемую на момент создания дампа.
Вы можете сжать полный файл дампа пользовательского режима в минидамп. Чтобы сжать полный файл дампа пользовательского режима, сначала загрузите файл дампа в отладчик. Затем используйте команду .dump (Создать файл дампа), чтобы сохранить новый файл дампа в формате minidump.
Несмотря на имена, самый большой файл минидампа содержит больше сведений, чем полный файл дампа в пользовательском режиме. Например, .dump /mf команды и .dump /ma создают более крупные и полные файлы, чем .dump /f команда .
В пользовательском режиме .dump /m [MiniOptions] часто является лучшим выбором. Размер файлов дампа, создаваемых с помощью этого параметра, может отличаться от очень маленького к очень большому. Указав правильный параметр MiniOptions , вы можете точно контролировать, какие сведения будут включены.
Минидампы
Размер и содержимое файла минидампа зависят от программы, в которой выполняется дамп, а также от приложения, выполняющего дамп, и выбранных параметров. Иногда файл minidump имеет средний размер и включает полную память и таблицу дескрипторов. В других случаях файл minidump гораздо меньше. Например, файл minidump может содержать только сведения об одном потоке или только сведения о модулях, на которые ссылается стек.
Термин минидамп вводит в заблуждение, так как самые большие файлы минидампа содержат больше информации, чем полный файл дампа в пользовательском режиме. Например, .dump /mf или .dump /ma создает более крупный и полный файл, чем .dump /f . По этой причине для создания всех файлов дампа в пользовательском режиме рекомендуется использовать .dump /m [MiniOptions] .dump /f .
Если вы создаете файл minidump с помощью отладчика, вы можете выбрать, какие сведения следует включить. Команда .dump /m содержит основные сведения о загруженных модулях, составляющих целевой процесс, сведения о потоке и сведения о стеке. Вы можете изменить базовую команду с помощью любого из параметров switch, описанных в следующей таблице:
параметр .dump | Влияние на файл дампа |
---|---|
/ma | Создает минидамп со всеми необязательными дополнениями. Параметр /ma эквивалентен параметру /mfFhut . Он добавляет в минидамп данные о полной памяти, данные обработки, выгруженные сведения о модуле, основные сведения о памяти и время потока. |
/mf | Добавляет данные полной памяти в минидамп. Включаются все доступные зафиксированные страницы, принадлежащие целевому приложению. |
/mF | Добавляет в минидамп все основные сведения о памяти. Этот параметр добавляет поток в минидамп, который содержит все основные сведения о памяти, а не только сведения о допустимой памяти. Отладчик использует эти сведения для восстановления полного макета виртуальной памяти процесса при отладке минидампа. |
/mh | Добавляет данные о дескрипторах, связанных с целевым приложением, в минидамп. |
/mu | Добавляет выгруженные сведения о модуле в минидамп. Этот параметр доступен только в Windows Server 2003 и более поздних версиях Windows. |
/mt | Добавляет дополнительные сведения о потоке в минидамп. Сведения о потоке включают время потока, которое можно отобразить с помощью TTIME (Отображение времени потока) при отладке минидампа. |
/mi | Добавляет вспомогательную память в минидамп. Вторичная память — это любая память, на которую ссылается указатель на стек или резервное хранилище, а также небольшая область вокруг этого адреса. |
/mp | Добавляет данные блока среды обработки и блока среды потока в минидамп. Эти сведения могут быть полезны, если вам нужен доступ к системной информации Windows, касающейся процессов и потоков приложения. |
/mw | Добавляет все зафиксированные частные страницы для чтения и записи в минидамп. |
/md | Добавляет все сегменты данных для чтения и записи в исполняемом образе в минидамп. |
/mc | Добавляет разделы кода в изображения. |
/mr | Удаляет из частей стека minidump и сохраняет память, которая не используется для повторного создания трассировки стека. Локальные переменные и другие значения типов данных также удаляются. Этот параметр не делает минидамп меньше (неиспользуемые разделы памяти обнуляются), но он полезен, если вы хотите защитить конфиденциальность других приложений. |
/mR | Удаляет полные пути к модулю из минидампа. Включены только имена модулей. Этот параметр полезен, если вы хотите защитить конфиденциальность структуры каталогов пользователя. |
Эти параметры можно комбинировать. Например, используйте команду .dump /mfiu , чтобы создать умеренно большой минидамп, содержащий выгруженную и вспомогательную память. Используйте команду .dump /mrR , чтобы создать минидамп, который удаляет некоторые сведения о пользователе. Полные сведения о синтаксисе см. в разделе .dump (Create Dump File) (Создание файла дампа).
Средства, используемые для создания файла дампа
Существует несколько различных средств, которые можно использовать для создания файла дампа в пользовательском режиме:
- ProcDump
- CDB
- Отладчик WinDbg
ProcDump
ProcDump — это служебная программа командной строки, с помощью которой можно отслеживать в приложении пиковые нагрузки ЦП и создавать аварийные дампы во время пиковых скачков. Администратор или разработчик может использовать файлы аварийного дампа, чтобы определить причину пикового скачка. ProcDump также включает наблюдение за зависшими окнами (с использованием того же определения зависания окна, которое используется в Windows и диспетчере задач) и необработанных исключений. ProcDump можно использовать для создания дампов на основе значений счетчиков производительности системы. ProcDump также может служить служебной программой дампа общего процесса, которую можно внедрить в другие скрипты.
Сведения о создании файла дампа в пользовательском режиме с помощью служебной программы Sysinternals ProcDump см. в разделе ProcDump.
CDB и WinDbg
Консольный отладчик (CDB) и отладчик Windows (WinDbg) — это средства отладки, которые входят в комплект средств разработки программного обеспечения Windows и комплект драйверов для Windows. См. параметры установки в разделе Скачивание и установка отладчика Windows WinDbg.
Вы можете использовать CDB или WinDbg для создания файлов дампа в пользовательском режиме несколькими способами:
- Создайте файл дампа автоматически.
- Создавайте файлы дампа при отладке.
- Сжатие существующего файла дампа.
Дополнительные сведения об инструментах см. в разделах начало работы с отладкой Windows и отладкой с помощью CDB.
Автоматическое создание файла дампа
При возникновении ошибки приложения Windows может отвечать одним из нескольких способов в зависимости от параметров отладки postmortem. Если эти параметры предписывают средству отладки создать файл дампа, создается файл дампа памяти в пользовательском режиме. Дополнительные сведения см. в разделе Включение посмертной отладки.
Создание файлов дампа при отладке
При отладке приложения в пользовательском режиме CDB или WinDbg можно также использовать команду .dump (Создать файл дампа) для создания файла дампа.
Эта команда не приводит к завершению работы целевого приложения. Выбрав определенные параметры команды, можно создать файл minidump, содержащий именно нужный объем информации.
Сжатие существующего файла дампа
Для сжатия файла дампа можно использовать CDB или WinDbg. Чтобы сжать файл дампа, начните отладку существующего файла дампа. Затем используйте .dump команду , чтобы создать файл дампа меньшего размера.
Отладка перемещения по времени
Другим вариантом отладки приложений в пользовательском режиме является отладка перемещения по времени (TTD). TTD — это инструмент, который можно использовать для записи процесса во время его выполнения. Вы можете воспроизвести запись сеанса отладчика, чтобы найти ошибку. Вы можете легко перейти к различным частям записи, чтобы понять условия, которые привели к ошибке, и как устранить проблему.
TTD имеет значительные преимущества по сравнению с файлами аварийного дампа, в которых часто отсутствует выполнение кода, которое привело к сбою. Возможность перемещения в обратном направлении при выполнении кода может быть полезна при определении первопричины.
Дальнейшие действия
- Узнайте, как анализировать файл дампа пользовательского режима.
- Получите советы по извлечению сведений из файла дампа.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Windows driver documentation
Что значит «создать файл дампа памяти»?
Дамп памяти — это копия содержимого оперативной памяти, находящаяся на жёстком диске или другом энергонезависимом устройстве памяти. Дамп памяти, как правило, создаётся при различных сбоях в программном обеспечении (например, в операционной системе) , приводящих к его краху, но ещё позволяющих запустить ту часть программы, которая предназначена для сбора информации о причине сбоя. Собственно, самая существенная область применения дампов памяти как раз и состоит в сборе информации о причинах фатальных для программного обеспечения сбоев в его собственной работе.
Остальные ответы
Списать на диск текущее содержимое памяти в виде файла. Бывает полезно в случае ошибки в программе. С помощью такого дампа автор может попытаться разобраться, в чём возникла проблема.
Рядовому пользователю такой файл не нужен. Только если отправить его автору программы.
Как бы отвечали недавно, исправляется с помощью — wmfix
копия памяти
то есть получается можно загрузить сам процесс программы? Например в любой момент сохранить игру, а потом загрузить её с той же позиции? Но как?
для чего нужны damp файлы и нужно ли их удалять самому?
Терминология
Дамп падения (в дальнейшем дамп) – специальный файл, собираемый с помощью библиотеки dbghelp.dll, содержащий в себе информацию о стеке приложения в момент падения. Также содержит в себе информацию о загруженных модулях, хендлах (handles), потоках, участках памяти и т. д. В подавляющем большинстве случаев помогает разобрать стек падения приложения.
Release-версия файла (сокращенно release) – бинарный исполняемый файл, собираемый из исходников проекта. Довольно сильно отличается от отладочной версии (например, наличием оптимизации и отсутствием инициализации данных специальными отладочными значениями) . Существует заблуждение, что release-файлы отлаживать нельзя. На самом деле их отлаживать можно, просто по умолчанию MS Visual Studio не включает поддержку символов в release-версиях. В документации Microsoft сказано, что включение поддержки символов незначительно увеличивает размер бинарных файлов. Однако, по моему личному опыту, размер файла увеличивается (и значительно) . В среднем файл увеличивается на 100 килобайт. На больших проектах это не заметно, но маленькие проекты после этого сильно увеличиваются в размерах.
СОВЕТ
Для включения генерации символов в release-версиях нужно в настройках компилятора выбрать значение «Generate Program Database» для опции «Debug Information Format» (опция компилятора /Zi). Если вы забудете сделать это, файл символов будет построен не полностью и отлаживаться по нему будет невозможно.
PDB-файл (файл символов или просто символы) . При компиляции проекта компоновщик строит исполняемый модуль. Фирмы-производители программного обеспечения уже давно разработали разные методы сохранения информации о строках исходных файлов в модулях символов. В настоящее время наиболее широко (речь идет о Microsoft) используется формат PDB версии 2 (MS Visual Studio 6.0) и PDB 7.0 (MS Visual Studio 7.0+). Данные форматы обеспечивают возможность получения расширенной информации об исполняемых модулях, в том числе возможность разбора стека, получения локальных переменных и т. д.
WinDBG. Один из отладчиков приложений Microsoft. Мое мнение заключается в том, что небольшие системы у себя на компьютере очень удобно отлаживать в Visual Studio, однако как только приложение становится распределенным и сложным, или необходима удаленная отладка в сложных условиях, самое удобное средство – это WinDBG. Повторюсь, что это мое личное мнение. Кроме того, в состав WinDBG входят различные утилиты для облегчения процесса отладки.
Источник: http://www.rsdn.ru/article/devtools/dump_arch.xml
Остальные ответы
Дампы это счтитай резервные копии, самому можно удалять, только оставь три четыре последних на случай восстановления.
Это образ куска памяти, который создается при непредвиденном падении программы. Нужен для разработчиков, для того чтобы понять где произошла ошибка. Создание дамп-файлов можно вообще отключить.