Ремонт РЭА

Как понять в чем проблема при появлении синего экрана (BSOD) или чем открыть файл dump. Коды ошибок компьютеров Определение текстовых сообщений, означающих ошибку

Обновление Anniversary операционной системы Windows 10 добавило в нее множество утилит и дополнительных программ, которые могут потребоваться пользователю. В том числе компания Microsoft ввела новое диагностическое приложение, которое позволяет определить причину возникновения «Синего экрана» - хорошо известной ошибки, которая приводит к перезагрузке компьютера. Если синий экран возникает часто, пользователю важно узнать, почему это происходит, после чего принять шаги для устранения проблемы.

Как узнать причину синего экрана (BSOD) в Windows 10

До обновления Anniversary на Windows 10 узнать причину возникновения синего экрана можно было только в системных файлах компьютера. Компания Microsoft стремится сократить количество взаимодействий между пользователем и системными данными PC, выпуская различные утилиты и диагностические приложения для определения синего экрана.

Чтобы узнать причину синего экрана в Windows 10 после Anniversary обновления нужно сделать следующее:



Важно помнить, что не всегда синий экран возникает при работе Windows из-за программной ошибки. Он может появляться из-за проблем с «железом» (перегрев или повреждения компонентов компьютера) или вирусами. Когда ошибка будет определена диагностической утилитой Windows, можно узнать подробности о ней на сайте Microsoft по коду ошибки BugCheck.

Почему нужно диагностировать причину синего экрана

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

Если синий экран появляется регулярно, нужно обязательно определить причину возникновения ошибки и устранить ее.

В данной статейки мы поговорим о таком явление в операционной системе Windows как — Blue Screen of Death или по нашему «синий экран смерти », также его называют STOP-ошибка. Рассмотрим основные причины возникновения и расшифруем коды данных ошибок.

А для начала давайте дадим определение, что такое «Blue Screen of Death » — это способ генерации сообщения о фатальной ошибке в операционных системах Windows NT 4.0, Windows 2000, Windows 2003, Windows XP, Windows Vista и Windows 7 вызванной нарушениями в работе некоторых программ или драйверов, но все равно чаще из-за аппаратных сбоев компьютера.

Синий экран приводит к остановке всех процессов в операционной системе и замиранию компьютера после вывода синего экрана. Вообще синий экран нам помогает, Вы спросите чем, а тем, что он предотвращает разрушения операционной системы и вывода из строй оборудования. При появлении «синего экрана смерти » отображается код ошибки и способ ее решения. Но может быть такое, что STOP-ошибка была вызвана, например искажением пакетов данных, передаваемых по локальной сети, в этом случае помогает простая перезагрузка. Если же ошибка появляется каждый раз при запуске операционной системы, то это уже возможно проблема, связанная с аппаратной частью компьютера, например повреждение драйверов, файловой системы, жесткого диска, блоков памяти RAM. Но для выяснения причин возникшей ошибки, необходимо переписать первые две выводимые строки STOP-ошибки. Например, как показано чуть ниже:

STOP 0x0000006B (0xC0000022, 0x00000000, 0x00000000, 0x00000000) PROCESS1_INITIALIZATION_FAILED

где 0xC0000022, 0x00000000, 0x00000000, 0x00000000 — параметры, раскрывающие смысл данной BSoD.

Есть кстати небольшая особенность, она заключается в том, что в операционной системе, чтобы увидеть синий экран нужно сначала включить эту возможность windows, или Вы просто не увидите этого экрана, при возникновении ошибки компьютер просто быстро перезагрузится (и так каждый раз).

Для того чтобы включить эту опцию перейдите в свойства «Мой компьютер», выберите вкладку «Дополнительно». В поле «Загрузка и восстановление» нажмите кнопку «Параметры». В появившемся окне снимите галочку напротив «Выполнить автоматическую перезагрузку».

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

Теперь давайте перейдем непосредственно к самим ошибкам и рассмотрим причины их возникновения и краткие способы решения.

0x00000001: APC_INDEX_MISMATCH

Внутренняя ошибка ядра (kernel). Проблема связана чаще всего с неполадкой в драйверах, нехваткой оперативной памяти или места на жестком диске.

0x0000000A: IRQL_NOT_LESS_OR_EQUAL

Произошло вмешательство в виртуальную память на внутреннем процессе IRQ высокого уровня. Наиболее типичная причина возникновения — драйвер устройства использует неверный адрес. Ошибка возникает из-за плохих драйверов. Редко возникает из-за неисправности одного из устройств в системе.
Параметры:

  1. Адрес, по которому выполнено ошибочное обращение
  2. IRQL, который использовался для обращения к памяти
  3. Тип доступа к памяти: 0 = операция чтения, 1 = операция записи
  4. Адрес инструкции, которая затребовала доступ к памяти по адресу

0x0000001E: KMODE_EXCEPTION_NOT_HANDLED

Это очень часто встречающаяся ошибка. Обычно исключённый адрес указывает на драйвер или функцию, которая вызвала стоп-экран. Всегда обращайте внимание не только на указанный драйвер, но и на сам адрес или имидж, содержащий эту ошибку. Обычно это код исключения 0x80000003. Эта ошибка означает, что точка прерывания или обработчик инициализировался при обращении к памяти, но система загрузилась с /NODEBUG ключа. Это ошибка не может появляться слишком часто. Если ошибка появляется постоянно, убедитесь, что отладчик (debugger) подключён и система загружается с /DEBUG ключа.
На не-Intel системах, если адрес исключения — 0XBFC0304, ошибка возникает вследствие кэширования процессора. Если ошибка появляется постоянно, свяжитесь с производителем процессора.
Как правило, требуется анализ второго параметра этого сообщения, который указывает на адрес драйвера/функции, которая была причиной проблемы.
Параметры:

  1. Код исключительной ситуации
  2. Адрес, при обработке которого произошел сбой
  3. Параметр 0 — исключение
  4. Параметр 1 — исключение

0x00000020: KERNEL_APC_PENDING_DURING_EXIT

Название ошибки указывает на повреждённый/отключённый APC счётчик. Если у вас такая ситуация, проверьте все файловые системы установленные на машине, например используя спасательный комплект EMRD.
Текущий IRQL должен быть равен нулю. Если IRQ не равен нулю, то определённый порядок выгрузки драйверов, при возвращении на более высокий уровень IRQ, может стать причиной возникновения ошибки. Попытайтесь запомнить, что вы делали или какие приложения закрывали, какие драйвера были установлены на момент возникновения синего экрана. Этот симптом указывает на серьёзную проблему в драйверах сторонних разработчиков.
Параметры:

  1. Адрес APC, на момент сбоя.
  2. Сбойная нить APC
  3. Текущий IRQ уровень

0x00000023: FAT_FILE_SYSTEM

FAT ).

0x00000024: NTFS_FILE_SYSTEM

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

0x0000002A: INCONSISTENT_IRP

I/O Request Packet (IRP) не функционирует; возникает, когда поле или несколько полей неверны по сравнению с сохранившемся состоянием IRP. Например, IRP был уже отключен, когда драйвер какого-либо устройства ждал команды.
Параметры:
1 — адрес по которому IRP был найден в нерабочем режиме

0x0000002B: PANIC_STACK_SWITCH

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

0x0000002E: DATA_BUS_ERROR

Данная STOP-ошибка чаще всего возникает из-за сбоя в области оперативной памяти. Такое может случиться, когда драйвер пытается обратиться к адресу памяти, которого не существует.
Параметры:

  1. Адрес виртуальной памяти, который стал причиной ошибки
  2. Физический адрес причины ошибки
  3. Регистрация статуса процессора (PSR)
  4. Регистрация инструкции ошибки (FIR)

0x00000031: PHASE0_INITIALIZATION_FAILED

Инициализацию системы не удалось завершить на ранней стадии (фаза 0). Нужно более детально изучить ошибку, так как данный код ошибки не говорит практический ни о чём.
0x00000032: PHASE1_INITIALIZATION_FAILED
Инициализацию системы не удалось завершить на поздней стадии (фаза 1). Нужно более детально изучить ошибку, так как данный код ошибки не говорит практический ни о чём.
Параметры:

  1. Код уровня системы, который описывает, по какой причине система считает, что инициализация не завершена
  2. Указывает место внутри INIT.C, где произошла ошибка инициализации фазы 1

0x00000035: NO_MORE_IRP_STACK_LOCATIONS

Драйвер высокого уровня пытался вызвать драйвер низкого уровня через интерфейс IoCallDriver(), но у системы не было свободного места в области стека, по этой причине драйвер низкого уровня не достигнет нужных параметров, так как для него вообще нет никаких параметров. Это фатальная ситуация, так как драйвер высокого уровня считает, что заполнил параметры для драйвера низкого уровня (что-то он должен был сделать, чтобы вызвать драйвер низкого уровня). Тем не менее, так как нет свободного места в области стека, был затерт конец пакета. Это часто возникает из-за повреждения блоков памяти стека. Необходимо проверить на ошибки память и драйвера.
Параметры:
1 — адрес IRP

0x00000036: DEVICE_REFERENCE_COUNT_NOT_ZERO

Драйвер устройства пытался удалить из системы один из компонентов своего устройства, но счётчик обращений этого компонента не был равен нулю -это означает, что за данным компонентом находятся какие-то невыполненные задачи (счётчик указывает код ошибки, из-за чего данный компонент не может быть выгружен). Это ошибка вызова драйвера.
Параметры:
1 — адрес объекта

0x0000003E: MULTIPROCESSOR_CONFIGURATION_NOT_SUPPORTED

Мультипроцессорная система не симметрична по отношению друг к другу. Для правильной симметричности, процессоры должны быть одного типа и уровня. Например, попытка использовать процессор уровня Pentium и 80486 одновременно, вызовет ошибку. Кроме того, на х86 системах, возможность вычислений с плавающей точкой должны быть либо на всех процессорах, либо ни на одном.

0x0000003F: NO_MORE_SYSTEM_PTES

Не хватает РТЕ (page file entries — точек доступа к файлу подкачки). Обычно причиной является драйвер, который плохо очищает файл подкачки (swap) и он переполняется. Также причиной может являться чрезмерная фрагментация файла подкачки.

0x00000040: TARGET_MDL_TOO_SMALL

Драйвер вызвал функцию IoBuildPartialMdl() и передал ему MDL, чтобы выявить часть источника MDL, но область получателя MDL недостаточно большая, для того, чтобы отобразить пределы требуемых адресов. Это ошибка драйвера.

0x00000041: MUST_SUCCEED_POOL_EMPTY

Драйвер системы запросил место в Must Suceed Pool. Данная функция не может быть выполнима, так как система не выделяет места в Must Suceed Pool. Замените или обновите неисправный драйвер системы.
Параметры:

  1. Величина требуемой запроса
  2. Номер использованной страницы
  3. Количество запрашиваемых страниц
  4. Количество доступных страниц

0x00000044: MULTIPLE_IRP_COMPLETE_REQUESTS

Драйвер запросил завершение IRP , но пакет был уже завершён. Эту ошибку сложно выявить. Возможная причина — драйвер пытается завершить одну и ту же операцию несколько раз. Редкая причина — 2 различных драйвера пытаются завладеть пакетом и завершить его. Первый как правило срабатывает, а второй нет. Отследить, какой именно драйвер это сделал, трудно, так как следы первого драйвера были переписаны вторым.
Параметры:
1 — адрес IRP

0x00000048: CANCEL_STATE_IN_COMPLETED_IRP

Эта ошибка указывает, что I/O Request Packet (IRP), который должен быть завершён, имеет порядок отмены определённый в нём же, т.е. это означает, что пакет в таком режиме, может быть отменен. Тем не менее, пакет не относиться более к драйверу, так как он уже вошёл в стадию завершения.
Параметры:
1 — адрес IRP

0x00000049: PAGE_FAULT_WITH_INTERRUPTS_OFF

Страничная ошибка при обращении к памяти, при выключенных прерываниях IRQ. Описание ошибки такое же, как и у 0x0000000A.

0x0000004C: FATAL_UNHANDLED_HARD_ERROR

Критическая нераспознанная ошибка. Наиболее вероятные причины описаны в 0xC0000218, 0xC000022A или
0xC0000221.

0x0000004D: NO_PAGES_AVAILABLE

Нет больше свободной страничной памяти, для завершения операции. Проверьте наличие свободного места на диске. Замените драйвер. Параметры:

  1. Количество использованных страниц
  2. Количество физических страниц на машине
  3. Расширенное значение величины страниц
  4. Общее значение величины страниц

0x0000004E: PFN_LIST_CORRUPT

Причина — повреждённая/неисправная структура ввода-вывода драйвера. Параметры:

  1. Значение 1
  2. Значение ListHead, которое повреждено
  3. Число доступных страниц
  1. Значение 2
  2. Данные, которые удаляются
  3. Максимальное число физических страниц
  4. Итог удаляемых данных

0x00000050: PAGE_FAULT_IN_NONPAGED_AREA

Возникает, когда запрошенная информация не была найдена в памяти. Система проверяет файл подкачки (page file), но отсутствующая информация была обозначена, как невозможная для записи в файл подкачки (page file).
Параметры:
1. указывает на адрес в памяти, который допустил ошибку

0x00000051: REGISTRY_ERROR

Произошла ошибка ввода-вывода с реестром, когда система попыталась прочитать один из его файлов, отсюда следует, что ошибка могла быть вызвана проблемой с оборудованием или повреждением самой системы. Это так же может означать, что ошибка вызвана операцией обновления, которую использует только система безопасности и эта ошибка возникает, когда ресурсы на исходе. Если такая ошибка возникла, проверьте, является ли машина PDC или BDC и сколько аккаунтов в базе данных SAM (Менеджер Безопасности Аккаунтов), не заполнены ли соответствующие библиотеки почти до конца.
Параметры:
1. значение 1 (указывает, где появилась ошибка)
2. значение 2 (указывает, где появилась ошибка)
3. может указывать на библиотеку
4. может быть возвратным кодом HvCheckHive’а, если какая-либо
библиотека повреждена

0x00000058: FTDISK_INTERNAL_ERROR

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

0x00000067: CONFIG_INITIALIZATION_FAILED

Ошибка означает, что реестр не может выделить место, необходимое для работы файлов реестра. Эта ошибка никогда не может появиться, так как процесс резервирования такого места происходит на ранней стадии загрузки системы и для реестра выделяется достаточно места.
Параметры:
1. пять
2. Указывает на NTOS\CONFIG\CMSYSINI, который потерпел неудачу.

0x00000069: IO1_INITIALIZATION_FAILED

Не удалось инициализировать устройство ввода-вывода по неизвестной причине. Такое происходит, если установщик системы неправильно определил оборудование в процессе инсталляции системы, или пользователь неверно переконфигурировал систему.

0x0000006B: PROCESS1_INITIALIZATION_FAILED

Параметры:
1. сообщает на код процесса, который решил, что инициализация системы не прошла успешно.
2. сообщает на место в NTOS\PS\PSINIT.C, где ошибка была обнаружена.
0x0000006D: SESSION1_INITIALIZATION_FAILED 0x0000006E: SESSION2_INITIALIZATION_FAILED 0x0000006F: SESSION3_INITIALIZATION_FAILED 0x00000070: SESSION4_INITIALIZATION_FAILED 0x00000071: SESSION5_INITIALIZATION_FAILED
Это коды кодов (SESSION1 — SESSION5) указывают место в NTOS\INIT\INIT.C, где была допущена ошибка.
Параметры:
1. сообщает код сессии, которая решила, что инициализация системы не прошла успешно.

0x00000073: CONFIG_LIST_FAILED

Указывает, что один из файлов реестра поврежден или нечитаем. Поврежден один из следующих файлов реестра: SOFTWARE, SECURITY, SAM (Менеджер Безопасности Аккаунтов). Возможной причиной является отсутствие места на диске, либо недостаток оперативной памяти.

0x00000074: BAD_SYSTEM_CONFIG_INFO

Эта ошибка может возникнуть в результате того, что файл реестра SYSTEM, загружаемый через компонент NTLDR, поврежден.
Эта ошибка так же может означать, что некоторые требуемые и их параметры отсутствуют. Загрузка в LastKnownGood (Последней удачной конфигурации) возможно решит эту проблему. Но не исключено, что вам придётся переустанавливать систему, или использовать спасательный диск.

0x00000075: CANNOT_WRITE_CONFIGURATION

Эта ошибка может возникнуть, когда в файлы системного реестра (SYSTEM и SYSTEM.ALT) не могут быть записаны дополнительные данные в момент инициализациями реестра в момент первой фазы (когда появляется доступ к файловым системам). Эта ошибка означает, что на диске нет свободного места, а также произошла попытка сохранить реестр на устройстве «только чтение».

0x00000076: PROCESS_HAS_LOCKED_PAGES

Эта ошибка может возникнуть по причине драйвера, который не полностью выгрузился после операции ввода-вывода. Параметры:
1. адрес процесса
2. число закрытых страниц
3. число зарезервированных страниц
4. ноль

0x00000077: KERNEL_STACK_INPAGE_ERROR

Ошибка считывания одной из страниц ядра система. Проблема заключается в сбойном блоке файла виртуальной памяти или ошибки контролера диска (очень редко, причиной может стать нехватка системных ресурсов, а точнее, может закончится резерв невиртуальной памяти со статусом c0000009a ).
Если первый и второй параметры кода ошибки равны 0, то это означает, что местоположение ошибки в ядре не найдено. А это значит, что ошибка вызвана плохим оборудованием.
Статус ввода-вывода c000009c (STATUS_DEVICE_DATA_ERROR) или C000016AL (STATUS_DISK_OPERATION_FAILED) обычно означает, что информация не может быть прочитана из-за плохого блока в памяти. После перезагрузки автоматическая проверка диска попытается определить адрес плохого блока в памяти. Если статус равен C0000185 (STATUS_IO_DEVICE_ERROR) и виртуальная память находиться на SCSI диске, то проверьте подключение и работу SCSI устройства.
Параметры:
1. ноль
2. ноль
3. значение PTE на момент ошибки
4. адрес ошибки ядра или

1. код статуса
2. код статуса ввода-вывода
3. номер страницы виртуальной памяти
4. Смещение в файле подкачк

0x00000079: MISMATCHED_HAL

Уровень проверки HAL и тип конфигурации HAL не подходят ядру системы или типу машины. Такая ошибка, скорее всего, вызвана тем, что пользователь вручную обновил либо NTOSKRNL.EXE либо HAL.DLL. Или на машине мультипроцессорный HAL (MP) и юнипроцессорное ядро (UP), или наоборот.

0x0000007A: KERNEL_DATA_INPAGE_ERROR

Не считывается запрашиваемая ядром страница. Ошибка вызвана плохим блоком в памяти или ошибкой контроллера диска. См. так же 0x00000077. Параметры:
1. тип зависшей блокировки
2. статус ошибки (обычно код ввода-вывода)
3. текущий процесс (виртуальный адрес для блокировки типа 3 или PTE)
4. адрес виртуальной памяти, который не может быть перемещен в файл подкачки

0x0000007B: INACCESSIBLE_BOOT_DEVICE

В процессе инсталляции I/O системы, драйвер загрузочного устройства, возможно, не смог инициализировать устройство, с которого система пыталась загрузиться, или файловая система, которая должна была прочитать это устройство, либо не смогла инициализироваться, либо просто не распознала информацию на устройстве, как структуру файловой системы. В вышеупомянутом случае, первый аргумент — это адрес уникодовой структуры информации, которая является ARC именем устройства, с которого была попытка загрузиться. Во втором случае, первый аргумент — это адрес объекта устройства, которое не может быть смонтировано.
Если эта ошибка возникла при начальной инсталляции системы, возможно система была установлена на диск или SCSI контроллер, которые ею не поддерживается. Имейте в виду, что некоторые контроллеры поддерживаются только драйверами из Windows-библиотек (WDL), которые должны быть установлены в режиме выборочной установкой.
Эта ошибка так же может произойти после установки нового SCSI адаптера или контроллера или после изменения системных разделов. В этом случае, на x86 системах, нужно отредактировать BOOT.INI.
Параметры:
1. указатель на объект устройства или уникодовая строка (Unicode string), или ARC имя.

0x0000007D: INSTALL_MORE_MEMORY

Не хватает оперативной памяти для запуска ядра Windows (необходимо 5 MB)
Параметры:
1. номер найденных физических страниц
2. нижняя физическая страница
3. верхняя физическая страница
4. ноль

0x0000007E: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED

Проблема с оборудованием, драйвером или обнаружена нехватка свободного места на диске. Также ошибка может проявляться при попытке обновления Windows XP до Service Pack 2 или Service Pack 3, либо Windows Vista при попытке обновления до Service Pack 1. Причина ошибки может быть связана с драйверами оборудования. Необходимо откатить изменения до состояния на момент установки Service Pack, либо удалить установленное обновление. Для решения данной проблемы необходимо обновить драйвера оборудования с сайта производителя.

0x0000007F: UNEXPECTED_KERNEL_MODE_TRAP

Произошло непредвиденное исключение в режиме ядра, или прерывания, при котором ядро не срабатывает. Также причиной ошибки может стать прерывание, которое повлекло за собой немедленную смерть в виде двойной ошибки — double fault. Первое число в коде ошибки — число прерывания (8 = double fault). Чтобы узнать больше, что это за прерывание, обратитесь к мануалу семейства Intel x86.
Иными словами, ошибка появляется, когда процессор допускает ошибку, с которой ядро не может справиться. Чаще всего ошибка возникает из-за плохих блоков ОЗУ, а иногда из-за разгона процессора.
Попробуйте отменить в BIOS функцию синхронной передачи данных.

0x00000080: NMI_HARDWARE_FAILURE

Ошибка инициализации ядра на данном оборудовании. HAL должен сообщить всю конкретную информацию, которую имеет, и предложить пользователю обратиться к поставщику оборудования за техподдержкой.

0x00000085: SETUP_FAILURE

Ошибка возникает при загрузке установщика системы в ранних версиях Windows NT. Текстовая форма setup’a больше не использует процедуру поиска ошибок (bugcheck), для того чтобы не создавать серьезных помех при установке. Поэтому вы никогда не столкнётесь с данной ошибкой. Все проверки ошибок были заменены на более дружелюбные и (где возможно) более информативные сообщения об ошибках.

0x0000008B: MBR_CHECKSUM_MISMATCH

Ошибка возникает в процессе загрузки, когда контрольная сумма MBR, вычисленная системой, не совпадает с контрольной суммой загрузчика. Обычно это означает вирус. Просканируйте загрузочный сектор антивирусной программой, предварительно загрузившись с компакт-диска.
KerBugCheckEx параметры:
1 — Сигнатура диска в MBR
2 — Контрольная сумма MBR, записанная в osloader
3 — Контрольная сумма MBR, записанная в системе

0x0000008E: PAGE_FAULT_IN_NON_PAGED_AREA

Несовместимость или неисправность блоков памяти RAM. Продиагностируйте память и замените неисправные модули оперативной памяти.

0x0000008F: PP0_INITIALIZATION_FAILED

Ошибка происходит во время инициализации нулевой фазы менеджера Plug and Play в режиме ядра. Проверьте оборудование и системный диск.

0x00000090: PP1_INITIALIZATION_FAILED

Ошибка происходит во время инициализации первичной фазы менеджера Plug and Play в режиме ядра. К этому моменту инициализированы системные файлы, драйвера и реестр. Проверьте оборудование и системный диск.

0x00000092: UP_DRIVER_ON_MP_SYSTEM

Ошибка возникает, когда однопроцессорный драйвер загружается в системе, где присутствует более чем один активный процессор. KeBugCheckEx параметры: 1 — Базовый адрес однопроцессорного драйвера

0x00000093: INVALID_KERNEL_HANDLE

Ошибка появляется, когда код ядра (kernel code) или другие критические компоненты ОС пытаются закрыть дескриптор, который не является действительным.
Параметры:
1 — Вызванный дескриптор NtClose
2 — 0 означает, что был закрыт защищенный дескриптор
1 означает, что был закрыт неправильный дескриптор
0x00000094: KERNEL_STACK_LOCKED_AT_EXIT
Это сообщение появляется, когда нить существует, в то время как её стек помечен, как блокированный. Проблема вызвана драйвером оборудования.

0x00000096: INVALID_WORK_QUEUE_ITEM

0x00000097: BOUND_IMAGE_UNSUPPORTED

Проблема вызвана некорректным драйвером оборудования.

0x00000098: END_OF_NT_EVALUATION_PERIOD

Время работы демонстрационной версии системы Windows закончилось. Параметры:
1 — Дата инсталляции (нижние 32-бита)
2 — Дата инсталляции (верхние 32-бита)
3 — Триал период в минутах.

0x00000099: INVALID_REGION_OR_SEGMENT

ExInitializeRegion или ExInterlockedExtendRegion были вызваны с неправильным набором параметров.

0x0000009A: SYSTEM_LICENSE_VIOLATION

Произошло нарушение программного лицензионного соглашения. Это может быть или из-за попытки изменить тип продукта системы, или попытки изменить срок триального периода ОС.

0x0000009B: UDFS_FILE_SYSTEM

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

0x0000009C: MACHINE_CHECK_EXCEPTION

Фатальная ошибка Machine Check Exception (проверка машины). Ошибка связана с неправильной конфигурацией оборудования, разгоном процессора, нестабильной работой блоков оперативной памяти, перегревом компонентов системы, нестабильной работой блока питания.

0x0000009F: DRIVER_POWER_STATE_FAILURE

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

0x000000A5: ACPI_BIOS_ERROR

Причиной данного сообщения являются постоянные сбои в ACPI BIOS. На уровне операционной системы данную проблему решить нельзя. Необходим детальный анализ.

0x000000B4: VIDEO_DRIVER_INIT_FAILURE

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

0x000000BE: ATTEMPTED_WRITE_TO_READONLY_MEMORY

Драйвер попытался записать данные в постоянное запоминающее устройство (ПЗУ), куда запись невозможна. Проблема в основном связана с установкой плохого драйвера устройства, службы или программно-аппаратного обеспечения. Смените драйвер.
_MEMORY_CORRUPTION
Драйвер записал данные в недопустимую секцию памяти. Смените драйвер.

0x000000C2: BAD_POOL_CALLER

Ядро системы или драйвер дали неправильную команду обращения к памяти. Как правило, плохой драйвер или программное обеспечение вызвало эту ошибку. Смените драйвер.

0x000000C4: DRIVER_VERIFIER_DETECTED_VIOLATION

Программа проверки драйвера обнаружила фатальную ошибку в модуле генерации STOP-ошибки. Сопроводительные параметры — параметры, которые передаются в KeBugCheckEx и отображаются на синем экране. Смените драйвер.

0x000000C5: DRIVER_CORRUPTED_EXPOOL

Произошла попытка обращения из недопустимой области памяти в процесс IRQL высокого уровня. Эта ошибка возникает почти всегда из-за драйверов, которые разрушили системный пул. Смените драйвер.

0x000000C6: DRIVER_CAUGHT_MODIFYING_FREED_POOL

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

0x000000C7: TIMER_OR_DPC_INVALID

Таймер ядра или Delayed Procedure Call (DPC) присутствует в запрещенном участке памяти. Данная ошибка возникает, когда драйвер не смог завершить работу таймера ядра или Delayed Procedure Call (DPC) перед отгрузкой его из памяти. Смените драйвер.

0x000000C9: DRIVER_VERIFIER_IOMANAGER_VIOLATION

Это сообщение от одного из менеджеров проверки драйвера. Смените драйвер.

0x000000CB: DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS

Ошибка, сходная со STOP-ошибкой 0x00000076. Отличается от последней только тем, что в данном случае ошибка выявлена при трассировке ядра. Ошибка указывает на то, что драйвер или менеджер ввода — вывода не могут открыть блокированные страницы после операции ввода — вывода. Обратите внимание на название прикладного драйвера в окне STOP-ошибке. Смените драйвер.

0x000000CE: DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS

Драйвер не может отменить зависшее состояние компонентов системы. Ошибка обычно происходит после установки плохих драйверов или компонентов сервиса. Смените драйвер.

0x000000D1: DRIVER_IRQL_NOT_LESS_OR_EQUAL

Система попыталась обратиться к страничной памяти, используя процесс ядра через IRQL высокого уровня. Самая типичная причина — плохой драйвер устройства. Это может также быть вызвано поврежденной оперативной памятью, или поврежденным файлом подкачки.

0x000000D8: DRIVER_USED_EXCESSIVE_PTES

Ошибка происходит, когда драйвер запрашивает большое количество памяти ядра.

0x000000E3: RESOURCE_NOT_OWNED

Различные сбои, связанные с файловой системой, приводят к данной STOP-ошибке. Проблема может быть связана с драйвером NTFS.SYS.

0x000000EA: THREAD_STUCK_IN_DEVICE_DRIVER

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

0x000000F2: HARDWARE_INTERRUPT_STORM

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

0x000000F3: DISORDERLY_SHUTDOWN

Завершение Windows потерпело крах из-за недостатка памяти. Определите, какая программа попала «за пределы памяти», попробуйте обнаружить, почему виртуальная память не обеспечивает нужными системными ресурсами, и исследуйте, отказывается ли программа (или, иногда, драйвер) завершать свою работу, без освобождения открытых страниц в памяти.

0x000000FA: HTTP_DRIVER_CORRUPTED

Системный драйвер Http.sys поврежден. Необходимо данный компонент восстановить с оригинального диска.

0x000000FC: ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY

Произведена попытка выполнить функцию в невыполняемой памяти. Параметры:
1 — Адрес, из которой была попытка выполнить функцию
2 — Содержание входа таблицы страниц (PTE)
0x000000FD: DIRTY_NOWRITE_PAGES_CONGESTION
Нет свободной страничной памяти для продолжения основных системных операций.
Параметры:
1 — Общее количество запрашиваемой страничной памяти
2 — Количество запрашиваемой страничной памяти с невозможностью для записи.
3 —
4 — Код состояния в момент последней записи в страничную память

0x000000FE: BUGCODE_USB_DRIVER

Произошла критическая ошибка в работе USB контроллера и связанных с ним устройств. Проблема как правило вызвана некорректной работой USB-контроллера, либо неисправностью подсоединенных USB-устройств. Отключите все USB-устройства от компьютера, также попробуйте отключить USB-контроллер в BIOS. Обновите драйвера USB.

0x00000101:CLOCK_WATCHDOG_TIMEOUT

Указывает, что ожидаемое прерывание по синхроимпульсам на вторичном процессоре в многопроцессорной системе не было получено в пределах определенного интервала. Данный процессор не обрабатывает прерывания. Как правило, это происходит, когда процессор не отвечает, либо вошел в бесконечный цикл.
Параметры:
1 — Интервал блокировки времени прерывания по синхроимпульсам, в
номинальных тактах системных часов
2 — ноль
3 — Адрес управляющего блока процессора (PRCB) для нереагируемого
процессора
4 — ноль

0x00000104: AGP_INVALID_ACCESS

Попытка записи графическим процессором в память, которая не была зарезервирована для этого. Ошибка связана с видеодрайвером, либо старой версией BIOS.
Параметры:
1 — Смещение (в ULONG) в пределах страниц AGP к первым данным
ULONG, данные которого разрушены
2 — ноль
3 — ноль
4 — ноль

0x00000105: AGP_GART_CORRUPTION

Ошибка появляется при повреждении Graphics Aperture Remapping Table (GART). Ошибка вызвана неправильной работой драйвера DMA (прямого доступа в память)
Параметры:
1 — Базовый адрес (виртуальный) в GART
2 — Смещение в GART, где выявлено искажение
3 — Базовый адрес (виртуальный) из кэша GART (копия GART)
4 — ноль

0x00000106: AGP_ILLEGALLY_REPROGRAMMED

Ошибка вызвана неподписанный либо поврежденным видеодрайвером. Замените видеодрайвер. Параметры:
1 — Оригинальная команда
2 — Текущая команда
3 — ноль
4 — ноль

0x00000108: THIRD_PARTY_FILE_SYSTEM_FAILURE

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

0x00000109: CRITICAL_STRUCTURE_CORRUPTION

Ядро системы обнаружило неверный код, либо нарушение целостности данных. Системы на базе 64-кода защищены от этой ошибки. Проблема могла быть вызвана сбоем оперативной памяти, либо драйверами третьей стороны.

0x0000010E: VIDEO_MEMORY_MANAGEMENT_INTERNAL

Обнаружена внутренняя ошибка видеодрайвера. Проблема с видеодрайвером.

0x0000010F: RESOURCE_MANAGER_EXCEPTION_NOT_HANDLED

В менеджере ресурсов режима ядра (kernel-mode resource manager) произошло исключение.

0x00000112: MSRPC_STATE_VIOLATION

Компонент системы msrpc.sys во время выполнения вернул код ошибки. Код ошибки указан в первом параметре.

0x00000113: VIDEO_DXGKRNL_FATAL_ERROR

Ядро DirectX Graphics выявило критическую ошибку.

0x00000114: VIDEO_SHADOW_DRIVER_FATAL_ERROR

Теневой видеодрайвер обнаружил критическую ошибку.

0x00000115: AGP_INTERNAL

В видеоинтерфейсе AGP драйвером видеопорта была обнаружена критическая ошибка.

0x00000116: VIDEO_TDR_ERROR

Сброс видеодрайвера по таймауту не был успешно произведен.

0x0000011C: ATTEMPTED_WRITE_TO_CM_PROTECTED_STORAGE

Была сделана попытка записи в область защищенную от записи конфигурационного менеджера: Параметры:
1 — Виртуальный адрес предпринятой команды записи
2 — Содержание PTE
3 — зарезервировано
4 — зарезервировано Название драйвера, делающего попытку операции записи, напечатано как
строка Unicode на экране ошибки.

0x00000121: DRIVER_VIOLATION

Драйвер произвел нарушение доступа в одну из областей памяти. Параметры:
1 — описывает тип нарушения
2 — зарезервировано
3 — зарезервировано Используйте отладчик ядра и просмотрите стек вызовов для определения
имени драйвера, который произвел нарушение доступа.

0x00000122: WHEA_INTERNAL_ERROR

Произошла внутренняя ошибка в архитектуре обнаружения ошибок аппаратных средств Windows (Windows Hardware Error Architecture (WHEA))

0x00000124: WHEA_UNCORRECTABLE_ERROR

Произошла ошибка в аппаратной части компьютера. Данная ошибка выявлена архитектурой обнаружения ошибок аппаратных средств Windows (Windows Hardware Error Architecture (WHEA))

0x00000127: PAGE_NOT_ZERO

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

страницу.

3 — ноль
4 — ноль

0x0000012B: FAULTY_HARDWARE_CORRUPTED_PAGE

Обнаружен single bit error (единичная битовая ошибка) на странице памяти. Это ошибка связана с аппаратной оперативной памятью. Параметры:
1 — Виртуальный адрес в памяти, который указывает на некорректную
страницу.
2 — Физический номер страницы
3 — ноль
4 — ноль

0x0000012C: EXFAT_FILE_SYSTEM

Возник сбой чтения или записи в раздел носителя, имеющим формат exFat. Сбой может быть связан с повреждением файловой системы, либо с появлением сбойных секторов на диске. Также сбой может быть связан с программным обеспечением, меняющим структуру диска (программы шифрования и прочее). Данный сбой относится к носителям, отформатированным под Windows Vista Service Pack 1.

0x1000007E: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
0x1000008E: KERNEL_MODE_EXCEPTION_NOT_HANDLED_M
0xC000009A: STATUS_INSUFFICIENT_RESOURCES

Системное ядро операционной системы исчерпало все системные ресурсы для своей работы, в том числе и файл подкачки. Проверьте диск на наличие ошибок. Увеличьте объем жесткого диска и объем оперативной памяти.

0xC0000135: UNABLE TO LOCATE DLL

Windows попытался загрузить DLL библиотеку и получил код ошибки. Возможная причина — файл отсутствует или поврежден. Возможно также поврежден системный реестр.

0xC0000142: DLL Initialization Failure

Данная ошибка была вызвана повреждением системной DLL библиотеки.

0xC0000218: UNKNOWN_HARD_ERROR

Необходимый файл системного реестра не может загрузиться. Файл может быть поврежден или отсутствует (необходим спасательный диск или переустановка Windows). Файлы системного реестра, возможно, были разрушены из-за повреждения жесткого диска. Драйвер, возможно, разрушил данные системного реестра при загрузке в память, или память, куда системный реестр был загружен, имеет ошибку четности (выключите внешний кэш и проверьте ОЗУ).

0xC000021A: STATUS_SYSTEM_PROCESS_TERMINATED

Это происходит, когда Windows переключился в привилегированный режим, а подсистемы непривилегированного режима, типа Winlogon или Подсистемы Времени выполнения Клиент-сервера (CSRSS), вызвали какой-либо сбой, и защиту нельзя гарантировать. Поскольку Windows XP не может работать без Winlogon или CSRSS, это — одна из немногих ситуаций, где отказ обслуживания непривилегированного режима может заставить систему прекращать отвечать. Эта также может произойти, когда компьютер перезапущен после того, как администратор системы изменил разрешения так, чтобы СИСТЕМНАЯ учетная запись больше не имела адекватные разрешения обратиться к системным файлам и папкам. Ошибка также может быть вызвана повреждением файла user32.dll или некорректными системными драйверами (.sys)

0xC0000221: STATUS_IMAGE_CHECKSUM_MISMATCH

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

0xC0000244

STOP-ошибка происходит, когда политика аудита активирует параметр CrashOnAuditFail

0xC000026C

Обычно указывает на проблемы драйвера устройства. Больше информации о данной ошибке

0xDEADDEAD: MANUALLY_INITIATED_CRASH1

«It’s dead, Jim!” (Это мертвый, Джим!) Эта STOP-ошибка указывает на то, что пользователь преднамеренно инициализировал аварийный отказ, либо от отладчика ядра, либо от клавиатуры.

Вот небольшой перечень ошибок, которые могу появляться в операционных системах Windows NT 4.0, Windows 2000, Windows 2003, Windows XP, Windows Vista и Windows 7. Все боятся синего экрана смерти, но на самом деле если его бы не было, то компьютер просто ломался, и Вам пришлось бы отдавать в ремонт Ваше оборудование, или покупать новое, или может даже весь компьютер. Поэтому давайте отдадим должное разработчикам этой операционной системы, которые заботятся о наших кошелках. На этом мы с Вами заканчиваем разговор о знаменитом «Синем экране смерти ».

Синий экран смерти (англ. Blue Screen of Death, Blue Screen of Doom, BSoD )- сообщения о критической системной ошибке в операционных системах Microsoft Windows. Многие кто сталкиваются на своем компьютере/ ноутбуке с синим экраном смерти, единственным решением видят переустановку операционной системы. Но иногда ОС здесь вовсе не причем, а проблема в "железе". Для того что бы не гадать- почему появился синий экран смерти, нужно использовать информацию, которую предоставляет сама операционная система в виде логов. В этой статье я пошагово опишу как выяснить причину появления синего экрана смерти.

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

Настройки касаемые перезагрузки после сбоя системы можно указать, если нажать правой кнопкой мыши на ярлыке Мой компьютер/ Компьютер (подходит для Windows XP, Windows7, Windows8), выбрать "Свойства ", или нажать сочетание клавиш + . Все принтскирны ниже будут касаться Windows7, аналогичным способ настраивается на Windows XP, Windows8, Windows8.1.

На вкладке "Дополнительно " выберите в поле Загрузка и восстановление "Параметры ".

Убираете галочку "Выполнить автоматическую перезагрузку ", для того что бы успеть увидеть все что пишет синий экран смерти. В строке Файл дампа указан путь, где будет сохраняться файл, в котором будут указаны причины сбоя.

Теперь вы можете внимательно изучить информацию при появлении синего экрана смерти. Если компьютер у вас уже не загружается, и изменить данные настройки вы не можете, в этом случае при загрузке нажимаете на клавиатуре F8 и выбираете пункт меню «При отказе системы не выполнять перезагрузку».

Если указанной там информации мало, можно воспользоваться дампом (dmp файл ). Для этого можно использовать инструмент microsoft- microsoft debugging tool, но он много весит, требует установки и наличия framework 4.5. Можно обойтись меньшими жертвами, если использовать программу BlueScreenView . На мой взгляд очень удобная программа не требующая установки и на русском языке (файл добавить в папку с программой). Запустив файл BlueScreenView.exe вам откроется интерфейс программы в котором уже будет загружен dump этого компьютера (используется путь по умолчанию C:\Windows\MiniDump, если зайти в Настройки- Дополнительные параметры можно указать другой путь, если вы скопировали dump в другое место).

Синий экран смерти (BSOD) является одним из самых неприятных проблем, с которой пользователь Windows может столкнуться. Зная, как определить причину сбоя является одним из наиболее важных форм диагностики BSOD. Ошибка с кодом синего экрана могут возникнуть по разным причинам и не проанализировав, с чем связана ошибка, ее сложно устранить. Это основные причины для синего экрана смерти BSOD:

  • Конфликты драйверов - конфликты с драйверами возникают, когда два или несколько драйверов не могут работать друг с другом должным образом. Это также может произойти, если несколько драйверов установлены для одного и того же устройства без удаления предыдущей версии.
  • Конфликты оборудования - Некорректный разгон ПК может сразу создать BSOD. Также "синий экран смерти" может возникать, если ваши планки RAM неправильно установлены или если часть оборудования начинает подходить к износу.
  • Ошибки операционной системы (ОС) - Пользовательская ошибка или вредоносное ПО, могут удалять жизненно важные файлы вашей ОС. Существенные недостающие файлы могут привести к пагубной ошибке, в результате чего ваш ПК войдет в цикл BSOD, в котором вы получаете синий экран каждый раз, когда ваш компьютер включается.

Подготовка к анализу дампа файла BSOD

Всякий раз, когда происходит BSOD ошибка, Windows выгружает некоторую информацию об этом в файл на вашем ПК, но попытка понять этот файл дампа очень сложна. Одним из облегченных способов понимания является использование утилиты BlueScreenView от NirSoft , свободного инструмента, который находит эти файлы дампа и отображает их в более удобной для пользователя форме. Прежде всего вам стоит проверить настройки для отчета дампа памяти в самой системе Windows:

  • Нажмите Win+R и введите sysdm.cpl
  • Перейдите на вкладку Дополнительно и выберите снизу

  • Убедитесь, что у вас включены настройки для записи ошибок в журнал.

Теперь скачиваем программу BlueScreenView , пролистайте в центр на сайте для загрузки файла. Вы увидите три ссылки, как на картинке ниже, выберите наиболее удобный для вас установщик. Если хотите русифицировать программу, то ниже в таблице найдите Russian и загрузите файл. В скаченном файле будет файл "BlueScreenView_lng", просто поместите его в установочную программу в корень.


Узнать коды ошибок Синего Экрана Смерти

Запустив программу, она вам покажет ошибки в файлах и дампы памяти. Как видим на рисунке ниже у меня выскакивает синий экран с ошибкой ndis.sys и походу неполадки в файле ntoskrni.exe. В верхнем столбце я могу посмотреть полный отчет о дампе файла, и нажав по нему правой кнопкой мыши найти в google информацию по исправлению. Ошибка скорее всего связана с установленной виртуальной машиной, точнее быть с виртуальным сетевым адаптером и антивирусом, который создает ошибку синего экрана после спящего режима и первичной загрузки системы.


Как исправить коды ошибок Синего Экрана Смерти

Приведу пару способов, что делать и как устранить ошибки популярными способами:

  • Когда к примеру в Windows 10 происходит синий экран смерти, то там будет QR код по которому вас перебросит на сайт .
  • На сайте Microsoft уже есть база с ошибками BSOD и подсказывающие инструменты.
  • Используйте виртуального агента Майкрасофт, введите в первую строку сообщения BSOD и следуйте инструкциям.
  • Microsoft также предлагает запустить

Искать ошибки в программах - непростая задача. Здесь нет никаких готовых методик или рецептов успеха. Можно даже сказать, что это - искусство. Тем не менее есть общие советы, которые помогут вам при поиске. В статье описаны основные шаги, которые стоит предпринять, если ваша программа работает некорректно.

Шаг 1: Занесите ошибку в трекер

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

  1. Вы забыли какую-то важную деталь об ошибке, например, в чем она заключалась.
  2. Вы могли делегировать ее кому-то более опытному.

Трекер поможет вам не потерять нить размышлений и о текущей проблеме, и о той, которую вы временно отложили. А если вы работаете в команде, это поможет делегировать исправление коллеге и держать все обсуждение в одном месте.

Вы должны записать в трекер следующую информацию:

  1. Что делал пользователь.
  2. Что он ожидал увидеть.
  3. Что случилось на самом деле.

Это должно подсказать, как воспроизвести ошибку. Если вы не сможете воспроизвести ее в любое время, ваши шансы исправить ошибку стремятся к нулю.

Шаг 2: Поищите сообщение об ошибке в сети

Если у вас есть сообщение об ошибке, то вам повезло. Или оно будет достаточно информативным, чтобы вы поняли, где и в чем заключается ошибка, или у вас будет готовый запрос для поиска в сети. Не повезло? Тогда переходите к следующему шагу.

Шаг 3: Найдите строку, в которой проявляется ошибка

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

Шаг 4: Найдите точную строку, в которой появилась ошибка

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

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

Шаг 5: Выясните природу ошибки

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

  1. Ошибка на единицу
    Вы начали цикл for с единицы вместо нуля или наоборот. Или, например, подумали, что метод.count() или.length() вернул индекс последнего элемента. Проверьте документацию к языку, чтобы убедиться, что нумерация массивов начинается с нуля или с единицы. Эта ошибка иногда проявляется в виде исключения Index out of range .
  2. Состояние гонки
    Ваш процесс или поток пытается использовать результат выполнения дочернего до того, как тот завершил свою работу. Ищите использование sleep() в коде. Возможно, на мощной машине дочерний поток выполняется за миллисекунду, а на менее производительной системе происходят задержки. Используйте правильные способы синхронизации многопоточного кода: мьютексы, семафоры, события и т. д.
  3. Неправильные настройки или константы
    Проверьте ваши конфигурационные файлы и константы. Я однажды потратил ужасные 16 часов, пытаясь понять, почему корзина на сайте с покупками виснет на стадии отправки заказа. Причина оказалась в неправильном значении в /etc/hosts , которое не позволяло приложению найти ip-адрес почтового сервера, что вызывало бесконечный цикл в попытке отправить счет заказчику.
  4. Неожиданный null
    Бьюсь об заклад, вы не раз получали ошибку с неинициализированной переменной. Убедитесь, что вы проверяете ссылки на null , особенно при обращении к свойствам по цепочке. Также проверьте случаи, когда возвращаемое из базы данных значение NULL представлено особым типом.
  5. Некорректные входные данные
    Вы проверяете вводимые данные? Вы точно не пытаетесь провести арифметические операции с введенными пользователем строками?
  6. Присваивание вместо сравнения
    Убедитесь, что вы не написали = вместо == , особенно в C-подобных языках.
  7. Ошибка округления
    Это случается, когда вы используете целое вместо Decimal , или float для денежных сумм, или слишком короткое целое (например, пытаетесь записать число большее, чем 2147483647, в 32-битное целое). Кроме того, может случиться так, что ошибка округления проявляется не сразу, а накапливается со временем (т. н. Эффект бабочки).
  8. Переполнение буфера и выход за пределы массива
    Проблема номер один в компьютерной безопасности. Вы выделяете память меньшего объема, чем записываемые туда данные. Или пытаетесь обратиться к элементу за пределами массива.
  9. Программисты не умеют считать
    Вы используете некорректную формулу. Проверьте, что вы не используете целочисленное деление вместо взятия остатка, или знаете, как перевести рациональную дробь в десятичную и т. д.
  10. Конкатенация строки и числа
    Вы ожидаете конкатенации двух строк, но одно из значений - число, и компилятор пытается произвести арифметические вычисления. Попробуйте явно приводить каждое значение к строке.
  11. 33 символа в varchar(32)
    Проверяйте данные, передаваемые в INSERT , на совпадение типов. Некоторые БД выбрасывают исключения (как и должны делать), некоторые просто обрезают строку (как MySQL). Недавно я столкнулся с такой ошибкой: программист забыл убрать кавычки из строки перед вставкой в базу данных, и длина строки превысила допустимую как раз на два символа. На поиск бага ушло много времени, потому что заметить две маленькие кавычки было сложно.
  12. Некорректное состояние
    Вы пытаетесь выполнить запрос при закрытом соединении или пытаетесь вставить запись в таблицу прежде, чем обновили таблицы, от которых она зависит.
  13. Особенности вашей системы, которых нет у пользователя
    Например: в тестовой БД между ID заказа и адресом отношение 1:1, и вы программировали, исходя из этого предположения. Но в работе выясняется, что заказы могут отправляться на один и тот же адрес, и, таким образом, у вас отношение 1:многим.

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

Шаг 6: Метод исключения

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

Попробуйте отключать компоненты системы один за другим, пока не найдете минимальную конфигурацию, которая будет работать. Затем подключайте их обратно по одному, пока ошибка не вернется. Таким образом вы вернетесь на шаг 3.

Шаг 7: Логгируйте все подряд и анализируйте журнал

Пройдитесь по каждому модулю или компоненту и добавьте больше сообщений. Начинайте постепенно, по одному модулю. Анализируйте лог до тех пор, пока не проявится неисправность. Если этого не случилось, добавьте еще сообщений.

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

Шаг 8: Исключите влияние железа или платформы

Замените оперативную память, жесткие диски, поменяйте сервер или рабочую станцию. Установите обновления, удалите обновления. Если ошибка пропадет, то причиной было железо, ОС или среда. Вы можете по желанию попробовать этот шаг раньше, так как неполадки в железе часто маскируют ошибки в ПО.

Если ваша программа работает по сети, проверьте свитч, замените кабель или запустите программу в другой сети.

Ради интереса, переключите кабель питания в другую розетку или к другому ИБП. Безумно? Почему бы не попробовать?

Если у вас возникает одна и та же ошибка вне зависимости от среды, то она в вашем коде.

Шаг 9: Обратите внимание на совпадения

  1. Ошибка появляется всегда в одно и то же время? Проверьте задачи, выполняющиеся по расписанию.
  2. Ошибка всегда проявляется вместе с чем-то еще, насколько абсурдной ни была бы эта связь? Обращайте внимание на каждую деталь. На каждую. Например, проявляется ли ошибка, когда включен кондиционер? Возможно, из-за этого падает напряжение в сети, что вызывает странные эффекты в железе.
  3. Есть ли что-то общее у пользователей программы, даже не связанное с ПО? Например, географическое положение (так был найден легендарный баг с письмом за 500 миль).
  4. Ошибка проявляется, когда другой процесс забирает достаточно большое количество памяти или ресурсов процессора? (Я однажды нашел в этом причину раздражающей проблемы «no trusted connection» с SQL-сервером).

Шаг 10: Обратитесь в техподдержку

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

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

  1. Позовите кого-нибудь еще.
    Попросите коллегу поискать ошибку вместе с вами. Возможно, он заметит что-то, что вы упустили. Это можно сделать на любом этапе.
  2. Внимательно просмотрите код.
    Я часто нахожу ошибку, просто спокойно просматривая код с начала и прокручивая его в голове.
  3. Рассмотрите случаи, когда код работает, и сравните их с неработающими.
    Недавно я обнаружил ошибку, заключавшуюся в том, что когда вводимые данные в XML-формате содержали строку xsi:type="xs:string" , все ломалось, но если этой строки не было, все работало корректно. Оказалось, что дополнительный атрибут ломал механизм десериализации.
  4. Идите спать.
    Не бойтесь идти домой до того, как исправите ошибку. Ваши способности обратно пропорциональны вашей усталости. Вы просто потратите время и измотаете себя.
  5. Сделайте творческий перерыв.
    Творческий перерыв - это когда вы отвлекаетесь от задачи и переключаете внимание на другие вещи. Вы, возможно, замечали, что лучшие идеи приходят в голову в душе или по пути домой. Смена контекста иногда помогает. Сходите пообедать, посмотрите фильм, полистайте интернет или займитесь другой проблемой.
  6. Закройте глаза на некоторые симптомы и сообщения и попробуйте сначала.
    Некоторые баги могут влиять друг на друга. Драйвер для dial-up соединения в Windows 95 мог сообщать, что канал занят, при том что вы могли отчетливо слышать звук соединяющегося модема. Если вам приходится держать в голове слишком много симптомов, попробуйте сконцентрироваться только на одном. Исправьте или найдите его причину и переходите к следующему.
  7. Поиграйте в доктора Хауса (только без Викодина).
    Соберите всех коллег, ходите по кабинету с тростью, пишите симптомы на доске и бросайте язвительные комментарии. Раз это работает в сериалах, почему бы не попробовать?

Что вам точно не поможет

  1. Паника
    Не надо сразу палить из пушки по воробьям. Некоторые менеджеры начинают паниковать и сразу откатываться, перезагружать сервера и т. п. в надежде, что что-нибудь из этого исправит проблему. Это никогда не работает. Кроме того, это создает еще больше хаоса и увеличивает время, необходимое для поиска ошибки. Делайте только один шаг за раз. Изучите результат. Обдумайте его, а затем переходите к следующей гипотезе.
  2. «Хелп, плиииз!»
    Когда вы обращаетесь на форум за советом, вы как минимум должны уже выполнить шаг 3. Никто не захочет или не сможет вам помочь, если вы не предоставите подробное описание проблемы, включая информацию об ОС, железе и участок проблемного кода. Создавайте тему только тогда, когда можете все подробно описать, и придумайте информативное название для нее.
  3. Переход на личности
    Если вы думаете, что в ошибке виноват кто-то другой, постарайтесь по крайней мере говорить с ним вежливо. Оскорбления, крики и паника не помогут человеку решить проблему. Даже если у вас в команде не в почете демократия, крики и применение грубой силы не заставят исправления магическим образом появиться.

Ошибка, которую я недавно исправил

Это была загадочная проблема с дублирующимися именами генерируемых файлов. Дальнейшая проверка показала, что у файлов различное содержание. Это было странно, поскольку имена файлов включали дату и время создания в формате yyMMddhhmmss . Шаг 9, совпадения : первый файл был создан в полпятого утра, дубликат генерировался в полпятого вечера того же дня. Совпадение? Нет, поскольку hh в