Файл дампа процесса что это

Обновлено: 06.07.2024

В первый раз, когда я столкнулся с проблемой сбоя программы, я разработал программу-плагин для устройства раньше, и на этом компьютере не было проблем, но сгенерированный исполняемый файл был скопирован на сервер, и программа была запущена. Сразу после ввода кода плагина служба плагина Он разбился. В то время эта проблема меня огорчила. С помощью моих коллег я узнал, что самый быстрый способ решить проблему сбоя программы - это создать файл дампа. Используйте инструмент отладки для отладки, создав файл дампа, чтобы восстановить состояние программы после сбоя. , Который может быстро находить и устранять проблемы. Файл дампа - это образ процесса в памяти. Состояние выполнения программы можно сохранить в файл дампа через отладчик. Файлы дампа используются разработчиками драйверов для отладки драйвера.Этот файл необходимо открывать с помощью специального программного обеспечения, такого как WinDbg и VS. Поскольку в первый раз, когда я столкнулся с подобной проблемой, я не имел ни малейшего представления, но мой коллега быстро обнаружил проблему с нулевым указателем через файл дампа. Придерживаясь принципа, что возникшая проблема не может быть проблемой во второй раз, дамп Описание значения, генерации, функции, анализа и расположения файла - это сводка сбоя программы.
Этот документ предназначен для разработчиков.

2.1 Типы файлов дампа

Файлы дампа в Windows делятся на две категории: дамп режима ядра и дамп пользовательского режима. Дамп режима ядра - это аварийный дамп, созданный операционной системой. Наиболее классическим является системный синий экран. В это время дамп режима ядра создается автоматически. Пользовательский режим Dump можно разделить на Full Dump (Полный дамп) и Mini Dump (Минидамп). Полный дамп содержит полные данные адресного пространства определенного процесса и много информации, используемой для отладки, в то время как Minidump имеет много типов, которые могут содержать различную информацию в зависимости от потребностей, а некоторые могут содержать только информацию об определенном потоке и некоторых модулях. Сбои приложения во время разработки программы - это дампы пользовательского режима. Поэтому необходимо уточнить состав, способ генерации и функцию этого файла дампа.

2.2 Роль файлов дампа

Файл дампа представляет собой образ процесса в памяти, и состояние выполнения программы может быть сохранено в файле дампа через отладчик. Он в основном используется для создания файла дампа при сбое или сбое в системе, а затем использовать отладчик для отладки, чтобы вы могли скопировать файл dmp в производственной среде на свою собственную машину разработки и отладить, чтобы найти место ошибки программы. .
На практике программирования на C ++ обычно встречаются распространенные проблемы C / C ++, такие как недопустимый доступ к памяти, недопустимые объекты, переполнение стека, вызовы нулевого указателя и т. д., и эти проблемы часто приводят к: сбою системы . Для решения проблемы сбоя одним из часто используемых методов является создание файла дампа для отладки кода, а другим - использование удаленного отладчика для отладки. Однако удаленный отладчик требует, чтобы исходный код программы и исполняемые файлы находились в одной локальной сети, что требует более высоких требований к среде. Следовательно, лучшим решением для сбоя программы является создание файла дампа для анализа, быстрого определения места сбоя программы и устранения проблемы. Во время этого сбоя подключаемого модуля произошел сбой двух строк кода:

Во время работы программы после того, как плагин напечатал «- CHikNetDevice :: SetSipConfig Starts», программа вылетела из строя, что можно распечатать через журнал. В нижней функции NETSDKPLUGIN_DEBUG соответствующий% s должен быть указателем на строку в стиле C. Но был передан объект типа C ++ std :: string, что привело к сбою программы.
Код сбоя после выглядит следующим образом:

Тело функции originalFmt.AssignFormat (cpOldStream) в синей строке в приведенном выше фрагменте кода


Использовалась функция pStream-> GetFormat (). Раньше, если звуковая карта была отключена или изображение ниже не было установлено на удаленном рабочем столе, pStream был нулевым указателем, а cpOldStream не оценивался как нулевой перед использованием, поэтому программа аварийно завершала работу, что приводило к Программа вылетела.

Пока Xingchen вставил управляющий код, созданный файлом дампа, в основную функцию при обнаружении проблемы, исключение нулевого указателя было быстро обнаружено.

2.3 Создание файла дампа

Когда программа запущена, неизбежны какие-то нештатные ситуации, особенно когда условие не позволяет отладчику зависать, очень важно, как быстро найти метод ошибки.
- очень важный метод поиска ошибок. Хороший журнал может помочь программистам быстро обнаружить проблему. Но журнала иногда бывает недостаточно:
Иногда журнал может найти только общий диапазон ошибок, но не может подтвердить проблему, например, программа обнаружила неизвестное исключение.
Нет возможности выйти из системы или невозможно получить информацию об ошибке, когда журнал доступен, например, при сбое программы.
Когда журнала явно недостаточно, DUMP-анализ соответствующих данных в процессе является более практичным и удобным методом. Многие приложения предоставляют этот тип функции, так что при возникновении проблемы с программой соответствующие данные могут быть отправлены разработчику, чтобы облегчить разработчику анализ проблемы. Такие приложения, как Office, будут иметь эту функцию. При сбое приложения появится диалоговое окно с запросом на отправку данных, связанных с ошибкой.
Поскольку файл дампа может сохранять внутреннюю память, стек, дескриптор, поток и другую информацию, относящуюся к работе программы, это очень важно. Поэтому понимание того, как создать файл дампа, поможет избежать затруднений. Один из способов запуска сцены.

2.3.1 Генерируется с помощью диспетчера задач

Этот метод может создать файл .DMP, открыв диспетчер задач, найдя процесс, соответствующий службе подключаемого модуля, щелкнув правой кнопкой мыши и выбрав создание файла дампа:

Место хранения файла .DMP показано ниже:

Сгенерированный файл дампа можно открыть с помощью VS, но обычная запущенная программа для создания файла .DMP не имеет большого эффекта. Вышеупомянутый метод необходимо использовать, когда программа дает сбой и не выходит напрямую. В общих сценариях программа дает сбой более грубо, поэтому вы можете использовать следующий метод для создания файла дампа.

2.3.2 Автоматически создается при программировании

lpTopLevelExceptionFilter - это указатель на функцию обработки исключений. Если он имеет значение NULL, по умолчанию используется UnhandledExceptionFilter. Следовательно, мы можем настроить функцию обработки исключений для lpTopLevelExceptionFilter. Нам нужно создать дамп памяти. Это достигается с помощью функции MiniDumpWriteDump.
Следующий код представляет собой создание файла дампа с помощью функции MiniDumpWriteDump.


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

2.3.3 Изменение генерации регистрационного кода

Метод изменения регистрационного кода не использовался, но, проконсультировавшись с онлайн-материалами, можно сделать следующее резюме:

Сбор дампов

Дампы можно собирать различными способами в зависимости от того, на какой платформе вы используете приложение.

Для сбора дампа внутри контейнера требуется возможность PTRACE, которую можно добавить с помощью --cap-add=SYS_PTRACE или --privileged .

Дампы могут содержать конфиденциальные сведения, поскольку они могут содержать всю память выполняющегося процесса. При их обработке следует учитывать ограничения безопасности и рекомендации.

Сбор дампов при сбое

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

В следующей таблице приведены переменные среды, которые можно настроить для сбора дампов при сбое.

Переменная среды Описание Значение по умолчанию
COMPlus_DbgEnableMiniDump или DOTNET_DbgEnableMiniDump Если задано значение 1, включите создание дампа ядра. 0
COMPlus_DbgMiniDumpType или DOTNET_DbgMiniDumpType Тип собираемого дампа. Дополнительные сведения см. в таблице ниже. 2 ( MiniDumpWithPrivateReadWriteMemory )
COMPlus_DbgMiniDumpName или DOTNET_DbgMiniDumpName Файл, в который записывается дамп. /tmp/coredump.<pid>
COMPlus_CreateDumpDiagnostics или DOTNET_CreateDumpDiagnostics Если задано значение 1, включите ведение журнала диагностики для процесса дампа. 0

В следующей таблице приведены все значения, которые можно использовать для DOTNET_DbgMiniDumpType . Например, если установить для параметра DOTNET_DbgMiniDumpType значение 1, при сбое будет собираться дамп типа MiniDumpNormal .

Значение Имя Описание
1 MiniDumpNormal Включение только сведений, необходимых для записи трассировок стека для всех существующих потоков в процессе. Ограниченная память кучи сборки мусора и информация.
2 MiniDumpWithPrivateReadWriteMemory Включение кучи сборки мусора и сведений, необходимых для записи трассировок стека для всех существующих потоков в процессе.
3 MiniDumpFilterTriage Включение только сведений, необходимых для записи трассировок стека для всех существующих потоков в процессе. Ограниченная память кучи сборки мусора и информация.
4 MiniDumpWithFullMemory Включение в процесс всей доступной памяти. Необработанные данные памяти включаются в конец, чтобы начальные структуры можно было сопоставить напрямую без необработанных данных памяти. Этот вариант может привести к созданию очень большого файла.

Сбор дампов в определенный момент времени

Вы можете собрать дамп, когда приложение еще не завершило работу. Например, если вы хотите проверить состояние приложения, в котором, на ваш взгляд, возникла взаимоблокировка, настройка переменных среды для сбора дампов при сбое не будет полезна, так как приложение все еще работает.

Для сбора дампа в собственном запросе можно использовать dotnet-dump , который является средством CLI для сбора и анализа дампов. Дополнительные сведения об использовании этого средства для сбора дампов с помощью dotnet-dump см. в разделе Служебная программа для сбора и анализа дампа.

Анализ дампов

Дампы можно проанализировать с помощью средства CLI dotnet-dump или Visual Studio.

Если необходима отладка машинного кода, можно использовать расширение отладчика SOS совместно с LLDB в Linux и macOS. SOS также поддерживается в Windows c Windbg/cdb, хотя рекомендуется использовать Visual Studio.

См. также раздел

В руководстве по отладке дампов Linux представлены пошаговые инструкции по отладке дампа, собранного в Linux.

На синем экране смерти содержится информация о причинах, вызвавших исключение (в виде кода STOP-ошибки вида 0x0000007b), адреса в памяти, при обращении к которым произошло исключение и прочая полезная информация. Такая информация называется STOP-ошибкой, переменными параметрами которой как раз являются адреса памяти. Иногда там же содержится имя файла, вызвавшего исключение.

Что такое дамп

  • dump (англ.) – мусорная куча; свалка; дыра; трущоба.
  • dump (memory dump) – 1) дамп, вывод содержимого оперативной памяти на печать или экран; 2) «снимок» оперативной памяти; данные, получаемые в результате дампинга; 3) аварийное снятие, выключение, сброс.
  • dumping – дампинг, снятие дампа.

Настройки для сохранения дампа памяти хранятся в системном реестре Windows.

Информация о дампе памяти в системном Реестре:

В разделе Реестра Windows [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl] аварийный дамп памяти определяется следующими параметрами:

– REG_DWORD-параметр AutoReboot со значением 0x1 (опция Выполнить автоматическую перезагрузку вспомогательного окна Загрузка и восстановление диалогового окна Свойства системы);

– REG_DWORD-параметр CrashDumpEnabled со значением 0x0, если дамп памяти не создается; 0x1 – Полный дамп памяти; 0x2 – Дамп памяти ядра; 0x3 – Малый дамп памяти (64КБ);

– REG_EXPAND_SZ-параметр DumpFile со значением по умолчанию %SystemRoot%\MEMORY.DMP (место хранения файла дампа);

– REG_DWORD-параметр LogEvent со значением по умолчанию 0x1 (опция Записать событие в системный журнал окна Загрузка и восстановление);

– REG_EXPAND_SZ-параметр MinidumpDir со значением по умолчанию %SystemRoot%\Minidump (опция Папка малого дампа окна Загрузка и восстановление);

– REG_DWORD-параметр Overwrite со значением по умолчанию 0x1 (опция Заменять существующий файл дампа окна Загрузка и восстановление);

Как система создает файл аварийного дампа памяти

Во время загрузки операционная система проверяет параметры создания аварийного дампа в разделе реестра [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]. Если указан хотя бы один параметр, то система генерирует карту блоков диска, занимаемых файлом подкачки на загрузочном томе, и сохраняет ее в памяти. Система также определяет, какой драйвер дискового устройства управляет загрузочным томом, вычисляет контрольные суммы для образа драйвера в памяти и для структур данных, которые должны быть целыми, чтобы драйвер мог выполнять операции ввода/вывода.

После сбоя ядро системы проверяет целостность карты страничного файла, дискового драйвера и управляющих структур дискового драйвера. Если целостность этих структур не нарушена, то ядро системы вызывает специальные функции ввода/вывода дискового драйвера, предназначенные для сохранения образа памяти после системного сбоя. Эти функции ввода/вывода самодостаточны и не полагаются на службы ядра системы, поскольку в программах, отвечающих за запись аварийного дампа, нельзя делать никаких предположений о том, какие части ядра системы или драйверы устройств при сбое были повреждены. Ядро системы записывает данные из памяти по карте секторов файла подкачки (при этом ему не приходится использовать драйверы файловой системы).

Сначала ядро системы проверяет состояние каждого компонента, задействованного в процессе сохранения дампа. Это делается для того, чтобы при прямой записи в секторы диска не повредить данные, лежащие вне страничного файла. Размер страничного файла должен быть на 1МБ больше размера физической памяти, потому что при записи информации в дамп создается заголовок, в котором содержатся сигнатура аварийного дампа и значения нескольких важнейших переменных ядра системы. Заголовок занимает меньше 1МБ, но операционная система может увеличивать (или уменьшать) размер файла подкачки не менее чем на 1МБ.

После загрузки системы Session Manager (Диспетчер сеанса Windows NT; дисковый адрес – \WINDOWS\system32\smss.exe) инициализирует страничные файлы системы, используя для создания каждого файла собственную функцию NtCreatePagingFile. NtCreatePagingFile определяет, существует ли инициализируемый страничный файл, и если да, то имеется ли в нем заголовок дампа. Если заголовок есть, то NtCreatePagingFile посылает в Session Manager специальный код. После этого Session Manager запускает процесс Winlogon (Программа входа в систему Windows NT; дисковый адрес – \WINDOWS\system32\winlogon.exe), который извещается о существовании аварийного дампа. Winlogon запускает программу SaveDump (Программа сохранения копии памяти Windows NT; дисковый адрес – \WINDOWS\system32\savedump.exe), которая анализирует заголовок дампа и определяет дальнейшие действия в аварийной ситуации.

Сохранив файл дампа, программа SaveDump делает запись о создании аварийного дампа в журнале событий Система, например: «Компьютер был перезагружен после критической ошибки: 0x100000d1 (0xc84d90a6, 0x00000010, 0x00000000, 0xc84d90a6). Копия памяти сохранена: C:\WINDOWS\Minidump\Mini060309-01.dmp».

Разновидности дампов

  • Полный дамп памяти записывает всё содержимое системной памяти при возникновении неустранимой ошибки. Для этого варианта необходимо иметь на загрузочном томе файл подкачки, размер которого равен объему всей физической оперативной памяти плюс 1МБ. По умолчанию полный дамп памяти записывается в файл %SystemRoot%\Memory.dmp. При возникновении новой ошибки и создании нового файла полного дампа памяти (или дампа памяти ядра) предыдущий файл заменяется (перезаписывается). Параметр Полный дамп памяти недоступен на ПК, на которых установлена 32-битная операционная система и 2 или более гигабайта оперативной памяти.

При возникновении новой ошибки и создании нового файла полного дампа памяти предыдущий файл заменяется.

  • Дамп памяти ядра записывает только память ядра, благодаря чему процесс записи данных в журнал при внезапной остановке системы протекает быстрее. В зависимости от объема физической памяти ПК в этом случае для файла подкачки требуется от 50 до 800МБ или одна треть физической памяти компьютера на загрузочном томе. По умолчанию дамп памяти ядра записывается в файл %SystemRoot%\Memory.dmp.

Этот дамп не включает нераспределенную память или память, выделенную для программ пользовательского режима. Он включает только память, выделенную для ядра и аппаратно-зависимого уровня (HAL) в Windows 2000 и более поздних версиях системы, а также память, выделенную для драйверов режима ядра и других программ режима ядра. В большинстве случаев такой дамп является наиболее предпочтительным вариантом. Он занимает намного меньше места по сравнению с полным дампом памяти, при этом исключая только те сектора памяти, которые, скорее всего, не связаны с ошибкой.
При возникновении новой ошибки и создании нового файла дампа памяти ядра предыдущий файл заменяется.

  • Малый дамп памяти записывает наименьший объем полезной информации, необходимых для определения причины неполадок. Для создания малого дампа памяти необходимо, чтобы размер файла подкачки составлял как минимум 2МБ на загрузочном томе.

Файлы малого дампа памяти содержат следующие сведения:

Файл малого дампа памяти используется при ограниченном пространстве жесткого диска. Однако из-за ограниченности содержащихся в нем сведений в результате анализа этого файла не всегда удается обнаружить ошибки, которые не были непосредственно вызваны потоком, выполнявшимся в момент ее возникновения.

При возникновении следующей ошибки и создании второго файла малого дампа памяти предыдущий файл сохраняется. Каждому дополнительному файлу дается уникальное имя. Дата закодирована в имени файла. Например, Mini051509-01.dmp — это первый файл дампа памяти, созданный 15 мая 2009 г. Список всех файлов малого дампа памяти хранится в папке %SystemRoot%\Minidump.

Операционная система Windows XP, несомненно, значительно надежнее предыдущих версий, – благодаря усилиям как разработчиков Microsoft, так и разработчиков драйверов аппаратного обеспечения, так и разработчиков прикладного программного обеспечения. Однако аварийные ситуации – всевозможные сбои и крахи системы – неизбежны, и от того, владеет ли пользователь ПК знаниями и навыками в их устранении, зависит, придется ему затратить несколько минут на поиск и устранение неисправности (например, на обновление/отладку драйвера или переустановку прикладной программы, вызывающей системный сбой), – или несколько часов на переустановку/настройку операционной системы и прикладного программного обеспечения (что не гарантирует отсутствия сбоев и крахов в дальнейшем!).

Многие системные администраторы всё еще пренебрегают анализом аварийных дампов Windows, считая, что работать с ними слишком трудно. Трудно, но можно: даже если, например, анализ одного дампа из десяти окажется успешным, – усилия, потраченные на освоение простейших приемов анализа аварийных дампов, будут не напрасны.

Приведу примеры из своей «сисадминской» практики.

В локальной сети без видимой причины («железо» в порядке, отсутствие вирусов гарантировано, пользователи – с «нормальными руками») «полегли» несколько рабочих станций с Windows XP SP1/SP2 «на борту». Компьютеры загрузить в нормальном режиме не удавалось, – доходило до «Приветствия» – и на перезагрузку до бесконечности. При этом, в Безопасном режиме ПК загружались.

Изучение дампов памяти позволило выявить причину неисправности: виновником оказался антивирус Касперского, точнее, свежие антивирусные базы (если еще точнее, то два модуля баз – base372c.avc, base032c.avc).

В обоих указанных случаях изучение аварийного дампа памяти позволило до минимума (несколько минут!) свести время для диагностирования и устранения неисправности.

Анализ дампа памяти

Для анализа аварийных дампов памяти существует множество программ, например, DumpChk, Kanalyze, WinDbg. Рассмотрим анализ аварийных дампов памяти с помощью программы WinDbg (входит в состав Debugging Tools for Windows).

Установка средств отладки

Использование программы WinDbg для анализа аварийных дампов памяти

Например, на следующем скриншоте причина неисправности – файл nv4_disp.dll драйвера видеокарты:



[Посещений: 2 012, из них сегодня: 5]

чем открыть dmp

Расширение DMP зарезервировано за файлами дампов памяти: снимков состояния RAM в определённый момент работы системы или отдельного приложения, которые нужны разработчикам для последующей отладки. Такой формат используют сотни видов ПО, и рассмотреть их все в объёмах данной статьи невозможно. Наиболее же часто встречающийся тип DMP-документа – так называемый малый дамп памяти, где записаны подробности сбоя системы, который привёл к появлению синего экрана смерти, потому на нём и сосредоточимся.

Способ 1: BlueScreenView

Небольшая бесплатная утилита от разработчика-энтузиаста, основной функцией которой является предоставление возможности просмотра DMP-файлов. Не нуждается в установке на компьютер – достаточно распаковать архив в любое подходящее место.

  1. Для открытия отдельного файла нажмите на кнопку с иконкой программы на панели инструментов.

Приступить к открытию DMP-файла в BlueScreenView

Выбрать открытие отдельного DMP-файла в BlueScreenView

Начать открытие DMP-файла в BlueScreenView

Подробное содержимое открытого DMP-файла в BlueScreenView

Утилита BlueScreenView рассчитана на продвинутых пользователей, потому её интерфейс может показаться сложным для новичка. Кроме того, доступна она только на английском языке.

Способ 2: Microsoft Debugging Tools for Windows

В составе среды разработки Windows SDK распространяется инструмент для отладки, который называется Debugging Tools for Windows. Приложение, рассчитанное на разработчиков, способно открывать в том числе и DMP-файлы.

  1. Для экономии места можно выбрать только Debugging Tools for Windows, отметив соответствующий пункт в процессе загрузки компонентов.

Выбор установки только Debugging Tools for Windows в Windows SDK

Открыть установленную Debugging Tools for Windows для открытия DMP

Для запуска программы используйте ярлык «WinDbg».

Внимание! Для открытия DMP-файлов используйте только x64- или x86-версии дебаггера!

Выбрать в проводнике DMP-файл для открытия в Debugging Tools for Windows

Содержимое DMP-файла, открытого в Debugging Tools for Windows

Утилита Debugging Tools for Windows ещё более сложная, чем BlueScreenView, и тоже не имеет русской локализации, однако предоставляет более подробную и точную информацию.

Заключение

Как видим, основную сложность при открытии DMP-файлов составляют сами программы, рассчитанные больше на специалистов, чем на рядовых пользователей.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Читайте также: