- Чтение небольшого файла сброса памяти, созданного Windows в случае сбоя
- Небольшие файлы сброса памяти
- Настройка типа сброса
- Средства для чтения небольшого файла сброса памяти
- Откройте файл сброса
- Примеры команд
- Изучение файла сброса
- Упрощение команд с помощью пакетного файла
- Анализ дампа памяти в Windows при BSOD с помощью WinDBG
- Типы аварийных дампов памяти Windows
- Как включить создание дампа памяти в Windows?
- Установка WinDBG в Windows
- Настройка ассоциации .dmp файлов с WinDBG
- Настройка сервера отладочных символов в WinDBG
- Анализ аварийного дампа памяти в WinDBG
Чтение небольшого файла сброса памяти, созданного Windows в случае сбоя
В этой статье описано, как изучить небольшой файл сброса памяти. Небольшой файл сброса памяти поможет определить причину сбоя компьютера.
Оригинальная версия продукта: Windows 10 — все выпуски, Windows Server 2012 R2
Исходный номер КБ: 315263
Если вы ищете сведения о отладки для Windows 8 или более поздней версии, проверьте средства отладки для Windows (WinDbg, KD, CDB, NTSD). Дополнительные сведения о небольшой свалке памяти вы можете получить в Small Memory Dump.
Небольшие файлы сброса памяти
Если компьютер сбои, как вы можете узнать, что произошло, устранить проблему и предотвратить ее снова? В этой ситуации может оказаться полезным небольшой файл сброса памяти. Небольшой файл сброса памяти содержит наименьшее количество полезных сведений, которые помогут определить причины сбоя компьютера. Файл сброса памяти содержит следующие сведения:
- Сообщение Stop, его параметры и другие данные
- Список загруженных драйверов
- Контекст процессора (PRCB) для остановленного процессора
- Сведения о процессе и контекст ядра (EPROCESS) для остановленного процесса
- Сведения о процессе и контекст ядра (ETHREAD) для остановленного потока
- Стек вызовов в режиме ядра для остановленного потока
Для создания файла сброса памяти Windows требуется файл paging в томе загрузки размером не менее 2 мегабайт (МБ). На компьютерах с Microsoft Windows 2000 или более поздней версии Windows создается новый файл сброса памяти при каждом сбое компьютера. История этих файлов хранится в папке. Если возникает вторая проблема и если Windows создает второй небольшой файл сброса памяти, Windows сохраняет предыдущий файл. Windows предоставляет каждому файлу отдельное имя файла с кодированной датой. Например, Mini022900-01.dmp — это первый файл сброса памяти, созданный 29 февраля 2000 г. Windows сохраняет список всех небольших файлов сброса памяти в %SystemRoot%\Minidump папке.
Небольшой файл сброса памяти может быть полезен при ограниченном пространстве жесткого диска. Однако из-за ограниченной информации, которая включена, ошибки, которые не были непосредственно вызваны потоком, который был запущен во время проблемы, не могут быть обнаружены при анализе этого файла.
Настройка типа сброса
Чтобы настроить параметры запуска и восстановления для использования небольшого файла сброса памяти, выполните следующие действия.
Поскольку существует несколько версий Microsoft Windows, следующие действия могут быть разными на вашем компьютере. Если они есть, см. документацию по продуктам для выполнения этих действий.
Нажмите кнопку Пуск и выберите Панель управления.
Дважды щелкните систему, а затем нажмите параметры advanced system.
Щелкните вкладку Advanced, а затем щелкните Параметры в статье Запуск и восстановление.
В списке сведений о отладке записи нажмите кнопку Малая свалка памяти (64k).
Чтобы изменить расположение папки для небольших файлов сброса памяти, введите новый путь в поле Dump File или в поле Каталог малых отвалов в зависимости от версии Windows.
Средства для чтения небольшого файла сброса памяти
Используйте утилиту проверки сброса (Dumpchk.exe) для чтения файла сброса памяти или проверки правильности создания файла.
Утилита проверки сброса не требует доступа к отладке символов. В файлах символов находятся различные данные, которые на самом деле не нужны при запуске разных файлов, но которые могут быть очень полезны в процессе отладки.
Дополнительные сведения об использовании службы проверки сброса в Windows NT, Windows 2000, Windows Server 2003 или Windows Server 2008 см. в статье Microsoft Knowledge Base 156280.Как использовать Dumpchk.exe для проверки файла сброса памяти.
Дополнительные сведения об использовании службы проверки сброса в Windows XP, Windows Vista или Windows 7 см. в статье Microsoft Knowledge Base 315271.Как использовать Dumpchk.exe для проверки файла сброса памяти.
Или вы можете использовать средство Отладка Windows (WinDbg.exe) или средство отладки ядра (KD.exe) для чтения небольших файлов сброса памяти. WinDbg и KD.exe включены в последнюю версию пакета Средств отладки для Windows.
Чтобы установить средства отладки, см. в веб-странице Download and Install Debugging Tools for Windows. Выберите типичную установку. По умолчанию установщик устанавливает средства отладки в следующей папке:
C:\Program Files\Debugging Tools for Windows
Эта веб-страница также предоставляет доступ к загружаемым пакетам символов для Windows. Дополнительные сведения о символах Windows см. в странице Отладкас символами и веб-странице Пакеты символов Windows.
Дополнительные сведения о параметрах файлов сброса в Windows см. в обзоре параметровфайлов сброса памяти для Windows.
Откройте файл сброса
Чтобы открыть файл сброса после завершения установки, выполните следующие действия:
Нажмите кнопку Начните, нажмите кнопку Запустить, cmd введите, а затем нажмите кнопку ОК.
Изменение в инструменты отладки для папки Windows. Для этого введите следующее в командной подсказке и нажмите кнопку ENTER:
Чтобы загрузить файл сброса в отладчик, введите одну из следующих команд и нажмите кнопку ENTER:
В следующей таблице объясняется использование держателей, используемых в этих командах.
Заполнитель | Объяснение |
---|---|
SymbolPath | Либо локальный путь, по котором были загружены файлы символов, либо путь сервера символов, включая папку кэша. Так как небольшой файл сброса памяти содержит ограниченные сведения, фактические двоичные файлы должны быть загружены вместе с символами для правильного чтения файла сброса. |
ImagePath | Путь этих файлов. Файлы содержатся в папке I386 на компакт-диске Windows XP. Например, путь может быть C:\Windows\I386 . |
DumpFilePath | Путь и имя файла для файла сброса, который вы изучаете. |
Примеры команд
Чтобы открыть файл сброса, можно использовать следующие примеры команд. Эти команды предполагают следующие:
- Содержимое папки I386 в компакт-диске Windows копируется в C:\Windows\I386 папку.
- Ваш файл сброса называется C:\Windows\Minidump\Minidump.dmp .
Пример 2. Если вместо командной строки вы предпочитаете графическую версию отладки, введите следующую команду:
Изучение файла сброса
Существует несколько команд, которые можно использовать для сбора сведений в файле сброса, в том числе следующие команды:
- Команда !analyze -show отображает код ошибки Stop и его параметры. Код ошибки Stop также известен как код проверки ошибок.
- Команда !analyze -v отображает многословный вывод.
- В lm N T команде перечислены указанные загруженные модули. Выход включает состояние и путь модуля.
Команда расширения !drivers отображает список всех драйверов, загруженных на компьютере назначения, а также сводную информацию об использовании их памяти. Расширение !drivers устарело в Windows XP и более поздней версии. Чтобы отобразить сведения о загруженных драйверах и других модулях, используйте lm команду. Команда lm N T отображает сведения в формате, аналогичном старому расширению драйверов!.
Справки по другим командам и полному синтаксису команд см. в документации по отладки средств справки. Документация о помощи средствам отладки можно найти в следующем расположении:
C:\Program Files\Debugging Tools for Windows\Debugger.chm
Если у вас есть проблемы, связанные с символами, используйте утилиту Symchk, чтобы убедиться, что правильные символы загружены правильно. Дополнительные сведения об использовании Symchk см. в рубрике Отладка с символами.
Упрощение команд с помощью пакетного файла
После определения команды, необходимой для загрузки свалок памяти, можно создать пакетный файл для проверки файла сброса. Например, создайте пакетный файл и назови его Dump.bat. Сохраните его в папке, где установлены средства отладки. Введите следующий текст в пакетный файл:
Если вы хотите изучить файл сброса, введите следующую команду, чтобы передать путь файла сброса в пакетный файл:
Анализ дампа памяти в Windows при BSOD с помощью WinDBG
В момент критического сбоя операционная система Windows прерывает работу и показывает синий экран смерти (BSOD). Содержимое оперативной памяти и вся информация о возникшей ошибке записывается в файл подкачки. При следующей загрузке Windows создается аварийный дамп c отладочной информацией на основе сохраненных данных. В системном журнале событий создается запись о критической ошибке.
Типы аварийных дампов памяти Windows
На примере актуальной операционной системы Windows 10 (Windows Server 2016) рассмотрим основные типы дампов памяти, которые может создавать система:
- Мини дамп памяти (Small memory dump) (256 КБ). Этот тип файла включает минимальный объем информации. Он содержит только сообщение об ошибке BSOD, информацию о драйверах, процессах, которые были активны в момент сбоя, а также какой процесс или поток ядра вызвал сбой.
- Дамп памяти ядра (Kernel memory dump). Как правило, небольшой по размеру — одна треть объема физической памяти. Дамп памяти ядра является более подробным, чем мини дамп. Он содержит информацию о драйверах и программах в режиме ядра, включает память, выделенную ядру Windows и аппаратному уровню абстракции (HAL), а также память, выделенную драйверам и другим программам в режиме ядра.
- Полный дамп памяти (Complete memory dump). Самый большой по объему и требует памяти, равной оперативной памяти вашей системы плюс 1MB, необходимый Windows для создания этого файла.
- Автоматический дамп памяти (Automatic memory dump). Соответствует дампу памяти ядра с точки зрения информации. Отличается только тем, сколько места он использует для создания файла дампа. Этот тип файлов не существовал в Windows 7. Он был добавлен в Windows 8.
- Активный дамп памяти (Active memory dump). Этот тип отсеивает элементы, которые не могут определить причину сбоя системы. Это было добавлено в Windows 10 и особенно полезно, если вы используете виртуальную машину, или если ваша система является хостом Hyper-V.
Как включить создание дампа памяти в Windows?
С помощью Win+Pause откройте окно с параметрами системы, выберите «Дополнительные параметры системы» (Advanced system settings). Во вкладке «Дополнительно» (Advanced), раздел «Загрузка и восстановление» (Startup and Recovery) нажмите кнопку «Параметры» (Settings). В открывшемся окне настройте действия при отказе системы. Поставьте галку в чек-боксе «Записать события в системный журнал» (Write an event to the system log), выберите тип дампа, который должен создаваться при сбое системы. Если в чек-боксе «Заменять существующий файл дампа» (Overwrite any existing file) поставить галку, то файл будет перезаписываться при каждом сбое. Лучше эту галку снять, тогда у вас будет больше информации для анализа. Отключите также автоматическую перезагрузку системы (Automatically restart).
В большинстве случаев для анализа причины BSOD вам будет достаточно малого дампа памяти.
Теперь при возникновении BSOD вы сможете проанализировать файл дампа и найти причину сбоев. Мини дамп по умолчанию сохраняется в папке %systemroot%\minidump. Для анализа файла дампа рекомендую воспользоваться программой WinDBG (Microsoft Kernel Debugger).
Установка WinDBG в Windows
Утилита WinDBG входит в «Пакет SDK для Windows 10» (Windows 10 SDK). Скачать можно здесь.
Файл называется winsdksetup.exe, размер 1,3 МБ.
Запустите установку и выберите, что именно нужно сделать – установить пакет на этот компьютер или загрузить для установки на другие компьютеры. Установим пакет на локальный компьютер.
Можете установить весь пакет, но для установки только инструмента отладки выберите Debugging Tools for Windows.
После установки ярлыки WinDBG можно найти в стартовом меню.
Настройка ассоциации .dmp файлов с WinDBG
Для того, чтобы открывать файлы дампов простым кликом, сопоставьте расширение .dmp с утилитой WinDBG.
- Откройте командную строку от имени администратора и выполните команды для 64-разрядной системы: cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
windbg.exe –IA
для 32-разрядной системы:
C:\Program Files (x86)\Windows Kits\10\Debuggers\x86
windbg.exe –IA - В результате типы файлов: .DMP, .HDMP, .MDMP, .KDMP, .WEW – будут сопоставлены с WinDBG.
Настройка сервера отладочных символов в WinDBG
Отладочные символы (debug-символы или symbol files) – это блоки данных, генерируемые в процессе компиляции программы совместно с исполняемым файлом. В таких блоках данных содержится информация о именах переменных, вызываемых функциях, библиотеках и т.д. Эти данные не нужны при выполнении программы, но полезные при ее отладке. Компоненты Microsoft компилируются с символами, распространяемыми через Microsoft Symbol Server.
Настройте WinDBG на использование Microsoft Symbol Server:
- Откройте WinDBG;
- Перейдите в меню File –>Symbol File Path;
- Пропишите строку, содержащую URL для загрузки символов отладки с сайта Microsoft и папку для сохранения кэша: SRV*E:\Sym_WinDBG*http://msdl.microsoft.com/download/symbols В примере кэш загружается в папку E:\Sym_WinDBG, можете указать любую.
- Не забывайте сохранить изменения в меню File –>Save WorkSpace;
WinDBG произведет поиск символов в локальной папке и, если не обнаружит в ней необходимых символов, то самостоятельно загрузит символы с указанного сайта. Если вы хотите добавить собственную папку с символами, то можно сделать это так:
Если подключение к интернету отсутствует, то загрузите предварительно пакет символов с ресурса Windows Symbol Packages.
Анализ аварийного дампа памяти в WinDBG
Отладчик WinDBG открывает файл дампа и загружает необходимые символы для отладки из локальной папки или из интернета. Во время этого процесса вы не можете использовать WinDBG. Внизу окна (в командной строке отладчика) появляется надпись Debugee not connected.
Команды вводятся в командную строку, расположенную внизу окна.
Самое главное, на что нужно обратить внимание – это код ошибки, который всегда указывается в шестнадцатеричном значении и имеет вид 0xXXXXXXXX (указываются в одном из вариантов — STOP: 0x0000007B, 02.07.2019 0008F, 0x8F). В нашем примере код ошибки 0х139.
Отладчик предлагает выполнить команду !analyze -v, достаточно навести указатель мыши на ссылку и кликнуть. Для чего нужна эта команда?
- Она выполняет предварительный анализ дампа памяти и предоставляет подробную информацию для начала анализа.
- Эта команда отобразит STOP-код и символическое имя ошибки.
- Она показывает стек вызовов команд, которые привели к аварийному завершению.
- Кроме того, здесь отображаются неисправности IP-адреса, процессов и регистров.
- Команда может предоставить готовые рекомендации по решению проблемы.
Основные моменты, на которые вы должны обратить внимание при анализе после выполнения команды !analyze –v (листинг неполный).
*****************************************************************************
* *
* Bugcheck Analysis *
* *
*****************************************************************************
Символическое имя STOP-ошибки (BugCheck)
KERNEL_SECURITY_CHECK_FAILURE (139)
Описание ошибки (Компонент ядра повредил критическую структуру данных. Это повреждение потенциально может позволить злоумышленнику получить контроль над этой машиной):
A kernel component has corrupted a critical data structure. The corruption could potentially allow a malicious user to gain control of this machine.
Аргументы ошибки:
Arguments:
Arg1: 0000000000000003, A LIST_ENTRY has been corrupted (i.e. double remove).
Arg2: ffffd0003a20d5d0, Address of the trap frame for the exception that caused the bugcheck
Arg3: ffffd0003a20d528, Address of the exception record for the exception that caused the bugcheck
Arg4: 0000000000000000, Reserved
Debugging Details:
——————
Счетчик показывает сколько раз система упала с аналогичной ошибкой:
Основная категория текущего сбоя:
Код STOP-ошибки в сокращенном формате:
Процесс, во время исполнения которого произошел сбой (не обязательно причина ошибки, просто в момент сбоя в памяти выполнялся этот процесс):
Расшифровка кода ошибки: В этом приложении система обнаружила переполнение буфера стека, что может позволить злоумышленнику получить контроль над этим приложением.
ERROR_CODE: (NTSTATUS) 0xc0000409 — The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.
EXCEPTION_CODE: (NTSTATUS) 0xc0000409 — The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.
Последний вызов в стеке:
LAST_CONTROL_TRANSFER: from fffff8040117d6a9 to fffff8040116b0a0
Стек вызовов в момент сбоя:
STACK_TEXT:
ffffd000`3a20d2a8 fffff804`0117d6a9 : 00000000`00000139 00000000`00000003 ffffd000`3a20d5d0 ffffd000`3a20d528 : nt!KeBugCheckEx
ffffd000`3a20d2b0 fffff804`0117da50 : ffffe000`f3ab9080 ffffe000`fc37e001 ffffd000`3a20d5d0 fffff804`0116e2a2 : nt!KiBugCheckDispatch+0x69
ffffd000`3a20d3f0 fffff804`0117c150 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiFastFailDispatch+0xd0
ffffd000`3a20d5d0 fffff804`01199482 : ffffc000`701ba270 ffffc000`00000001 000000ea`73f68040 fffff804`000006f9 : nt!KiRaiseSecurityCheckFailure+0x3d0
ffffd000`3a20d760 fffff804`014a455d : 00000000`00000001 ffffd000`3a20d941 ffffe000`fcacb000 ffffd000`3a20d951 : nt! ?? ::FNODOBFM::`string’+0x17252
ffffd000`3a20d8c0 fffff804`013a34ac : 00000000`00000004 00000000`00000000 ffffd000`3a20d9d8 ffffe001`0a34c600 : nt!IopSynchronousServiceTail+0x379
ffffd000`3a20d990 fffff804`0117d313 : ffffffff`fffffffe 00000000`00000000 00000000`00000000 000000eb`a0cf1380 : nt!NtWriteFile+0x694
ffffd000`3a20da90 00007ffb`475307da : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13
000000ee`f25ed2b8 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x00007ffb`475307da
Участок кода, где возникла ошибка:
FOLLOWUP_IP:
nt!KiFastFailDispatch+d0
fffff804`0117da50 c644242000 mov byte ptr [rsp+20h],0
FAULT_INSTR_CODE: 202444c6
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: nt!KiFastFailDispatch+d0
FOLLOWUP_NAME: MachineOwner
Имя модуля в таблице объектов ядра. Если анализатору удалось обнаружить проблемный драйвер, имя отображается в полях MODULE_NAME и IMAGE_NAME:
MODULE_NAME: nt
IMAGE_NAME: ntkrnlmp.exe
Если кликнете по ссылке модуля (nt), то увидите подробную информацию о пути и других свойствах модуля. Находите указанный файл, и изучаете его свойства.
1: kd> lmvm nt
Browse full module list
Loaded symbol image file: ntkrnlmp.exe
Mapped memory image file: C:\ProgramData\dbg\sym\ntoskrnl.exe\5A9A2147787000\ntoskrnl.exe
Image path: ntkrnlmp.exe
Image name: ntkrnlmp.exe
InternalName: ntkrnlmp.exe
OriginalFilename: ntkrnlmp.exe
ProductVersion: 6.3.9600.18946
FileVersion: 6.3.9600.18946 (winblue_ltsb_escrow.180302-1800)
В приведенном примере анализ указал на файл ядра ntkrnlmp.exe. Когда анализ дампа памяти указывает на системный драйвер (например, win32k.sys) или файл ядра (как в нашем примере ntkrnlmp.exe), вероятнее всего данный файл не является причиной проблемы. Очень часто оказывается, что проблема кроется в драйвере устройства, настройках BIOS или в неисправности оборудования.
Если вы увидели, что BSOD возник из-за стороннего драйвера, его имя будет указано в значениях MODULE_NAME и IMAGE_NAME.
Image path: \SystemRoot\system32\drivers\cmudaxp.sys
Image name: cmudaxp.sys
Откройте свойсва файла драйвера и проверьте его версию. В большинстве случаев проблема с драйверами решается их обнвовлением.