Как мне проанализировать BSOD и информацию об ошибке, которую он мне предоставит? - PullRequest
8 голосов
/ 24 августа 2009

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

И затем система перезагружается и, возможно, записала в систему какой-либо журнал ошибок или другую информацию. Где это, что в нем содержится и как я могу использовать его для улучшения своего кода?

В прошлом я регулярно получал BSOD, когда взаимодействовал с системой УАТС, в которой просто отсутствовал объем документации по ее драйверам, поэтому мне пришлось выполнять некоторые методы проб и ошибок. К счастью, сейчас я работаю в другой компании и не вижу никаких BSOD в результате моего кода.

Ответы [ 2 ]

6 голосов
/ 24 августа 2009

Если вы хотите довольно простой способ выяснить причину сбоя ОС, которая будет работать ~ 90% времени - при условии, что у вас есть дамп сбоя - попробуйте следующее:

  • Загрузите WinDbg как часть Средства отладки для Windows . Обратите внимание, что вам нужно только установить компонент под названием Средства отладки для Windows.
  • Запустить WinDbg
  • Выберите «Открыть Crash Dump» из меню файлов
  • Когда файл дампа загружен, введите analyze -v и нажмите enter
  • WinDbg выполнит автоматический анализ сбоя и предоставит огромное количество информации о состоянии системы в момент сбоя. Обычно он может сказать вам, какой модуль был неисправен и какой тип ошибки вызвал сбой. Вы также должны получить трассировку стека, которая может или не может быть полезной для вас.
  • Другая полезная команда - kb, которая печатает трассировку стека. В этом списке найдите строку, содержащую .sys. Обычно это драйвер, вызвавший сбой.

Обратите внимание, что вам нужно настроить символы в WinDbg, если вы хотите, чтобы трассировка стека давала вам имена функций. Для этого:

  • Создать папку, например C: \ символы
  • В WinDbg откройте Файл -> Путь к символьному файлу
  • Добавить: SRV*C:\symbols*http://msdl.microsoft.com/download/symbols

Это кеширует файлы символов с серверов Microsoft.

Если автоматического анализа недостаточно, WinDbg предоставляет множество команд, позволяющих вам точно определить, что происходило в момент сбоя. Файл справки - хорошее место для начала в этом сценарии.

3 голосов
/ 24 августа 2009

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

Что произойдет, когда ОС выйдет из строя, если она запишет файл дампа ядра, в зависимости от текущих флагов и т. Д., Вы получите более или менее информацию в нем. Вы можете загрузить файл дампа в windbg или в другой отладчик. Windbg имеет полезную команду !analyze, которая изучит файл дампа и даст вам подсказки о корзине, в которую упал сбой, и возможных виновниках. Также проверьте документацию windbg об общей причине проверки ошибок и о том, что вы можете сделать для ее устранения.

...