Поделиться через


Отладка сбоя User-Mode с помощью KD

Для правильной отладки сбоев в пользовательском режиме требуется CDB или WinDbg. Однако иногда исключение пользовательского режима разбивается на KD, так как отладчик пользовательского режима отсутствует. Бывают также случаи, когда полезно отслеживать, какие конкретные процессы пользовательского режима выполняются при отладке проблемы в режиме ядра.

По умолчанию отладчик ядра пытается загрузить первый символ пользовательского режима, соответствующий указанному адресу (для команды k, u или ln ).

К сожалению, символы пользовательского режима часто не указываются в пути к символам или первый символ не является правильным. Если символов нет, скопируйте их в путь к символам или используйте команду .sympath (Задать путь к символу), чтобы указать полное дерево символов, а затем используйте команду .reload (Reload Module). Если загружен неправильный символ, можно явно загрузить символ, выполнив файл .reload <binary.ext>.

Большинство библиотек DLL Windows перебазированы, поэтому они загружаются по разным адресам, но существуют исключения. Видеоадаптеры являются наиболее распространенными исключениями. Есть десятки видеоадаптеров, которые загружаются по одному базовому адресу, поэтому KD почти всегда найдет ati.dll (первый символ видео, в алфавитном порядке). Для видео также загружен .sys файл, который можно определить с помощью команды lm . С помощью этой информации можно выдать файл .reload , чтобы получить правильные библиотеки DLL видео. Бывают также случаи, когда отладчик путается, и перезагрузка определенных символов поможет получить правильный стек. Распостраните функции, чтобы убедиться, что символы выглядят правильно.

Как и в библиотеках DLL видео, почти все исполняемые файлы загружаются по одному адресу, поэтому KD будет сообщать о доступе. Если в доступе отображается трассировка стека, выполните !process и reload заданного имени исполняемого файла. Если исполняемый файл не содержит символов в пути к символам, скопируйте их и снова выполните перезагрузку.

Иногда У KD или WinDbg возникают проблемы с загрузкой правильных символов в пользовательском режиме, даже если полное дерево символов находится в пути к символам. В этом случае ntdll.dll и kernel32.dll являются двумя наиболее распространенными символами, которые потребуются. В случае отладки CSRSS из KD winsrv.dll и csrsrv.dll также являются распространенными библиотеками DLL для загрузки.