Консультируя клиентов, я обратил внимание на то, что зачастую для них единственный способ борьбы с синим экраном смерти (Blue Screen of Death, BSoD) — это поиск неисправности по номеру STOP-ошибки. Обычно такой подход может помочь выбрать общее направление решения проблемы, но не всегда позволяет ее локализовать. Например, определить какой конкретный драйвер устройства вызывает BSoD. Строго говоря, анализ дампов памяти — это основной метод борьбы с STOP-ошибками.
При возникновении STOP-ошибки Microsoft Windows может записать отладочную информацию. Для этого необходимо выполнить следующие действия:
1. Нажмите кнопку Пуск и выберите в меню Настройка пункт Панель управления
2. Дважды щелкните по значку Система
3. Откройте вкладку Дополнительно и нажмите кнопку Параметры в области Загрузка и восстановление
4. В области Запись отладочной информации выберите пункт Малый дамп памяти (64 КБ)
В файле малого дампа памяти записывается минимальная информация, позволяющая установить причину сбоя компьютера. Для этого на загрузочном томе требуется файл подкачки размером не менее 2 МБ. По умолчанию файлы малого дампа памяти хранятся в папке %SystemRoot%\Minidump.
Файлы малого дампа памяти содержат следующие сведения:
- Сообщение о неустранимой ошибке, ее параметры и прочие данные
- Список загруженных драйверов
- Контекст процессора (PRCB), на котором произошел сбой
- Сведения о процессе и контекст ядра (EPROCESS) для процесса, вызвавшего ошибку
- Сведения о процессе и контекст ядра (ETHREAD) для потока, вызвавшего ошибку
- Стек вызовов в режиме ядра для потока, вызвавшего ошибку
Преимущество файла малого дампа памяти в том, что он имеет небольшой размер. В настоящее время объем оперативной памяти устанавливаемой в компьютеры измеряется гигабайтами, таким образом сохранение файла такого размера займет продолжительное время и может вызвать трудности при ограниченном пространстве жесткого диска. С другой стороны ограниченность сведений, содержащихся в файле малого дампа, не всегда позволяет обнаружить ошибки, которые не были непосредственно вызваны потоком, выполнявшимся в момент их возникновения.
Для анализа дампов памяти используются утилиты kd.exe и windbg.exe. Эти утилиты входят в набор Debugging Tools for Windows. Для того чтобы упростить работу с ними, рекомендую использовать скрипт kdfe.cmd (автор Alexander Suhovey). Вам так же понадобится утилита reg.exe (включена в Microsoft Windows XP и выше; для Windows 2000 входит в состав Windows 2000 Support Tools).
Скачайте и распакуйте архив со скриптом в папку D:\KDFE. Для работы отладчику требуются символьные файлы, которые можно скачать там же, где и Debugging Tools for Windows. Полный размер пакета с этими файлами довольно внушителен (может составить более 1Гб в зависимости от выбранной платформы). Поэтому скрипт настроен таким образом, чтобы автоматически скачивать с Microsoft Symbol Server только необходимые символьные файлы для работы с конкретным дампом памяти и сохранять их локально на диске для последующего использования. При необходимости можно отредактировать скрипт и изменить переменную smbpath, которая указывает на папку, в которую kd.exe будет сохранять необходимые файлы.
Для использования выполните kdfe.cmd с именем файла дампа памяти в качестве параметра. Например:
D:\KDFE>kdfe mini111208-01.dmp
Analyzing "D:\KDFE\Mini111208-01.dmp", please wait... Done.
Crash date: Wed Nov 12 08:35:56.214 2008 (GMT+2)
Stop error code: 0x50
Process name: AUM.exe
Probably caused by: nv4_disp.dll ( nv4_disp+41213 )
Надо отметить, что бывают ситуации, когда из-за некорректной работы одного из драйверов, STOP-ошибка впоследствии возникает в совершенно нормальном драйвере. В этом случае рекомендую использовать утилиту verifier.exe (см. http://support.microsoft.com/kb/244617/ru)