Нужно ли устанавливать точку останова в драйвере режима ядра для отладки функции в ее аналоге пользовательского режима (используя Windbg)?
Я использую Windbg для отладки моего драйвера пользовательского режима (рассмотрим USB). Мой пакет драйверов (отладочная сборка, 64-разрядная версия) содержит код как в режиме ядра, так и в режиме пользователя. Пакет был успешно установлен на моей целевой машине, и модуль тоже был загружен (как я могу проверить с помощью команды windbg: 'lm "). И я запускаю Windbg в режиме администратора на хосте и отлаживаю цель с помощью карты 1394 FireWire.
После запуска приложения, когда я пытаюсь отладить функцию в драйвере пользовательского режима, я замечаю, что предназначенная функция не получает удар, хотя точка останова правильно установлена и включена. Затем я установил точку останова функции (повторяющаяся служебная процедура, которая часто срабатывает при включении) в коде ядра. На этот раз эта функция драйвера режима ядра взломается, и через некоторое время вышеупомянутая функция драйвера режима пользователя тоже взломается, и я могу отлаживать то же самое и следовать пути кода.
Опять же, когда я закрываю и перезапускаю приложение, только когда активирована и нажата точка останова функции драйвера режима ядра, срабатывает функция драйвера режима пользователя. Но, если он отключен, функция драйвера пользовательского режима не срабатывает. Это происходит независимо от того, для каких функций мы устанавливаем точки останова в драйверах режима ядра или режима пользователя.
Почему такое поведение, хотя модули правильно загружены? Нужно ли что-то настраивать или проверять, чтобы при запуске приложения мне не приходилось полагаться на часть режима ядра?
2 ответа
Я видел, как WinDBG иногда ведет себя немного странно, когда дело доходит до отладки вызовов в режиме пользователя!
Один быстрый совет: если вы выполняете отладку в Vista или выше, обратите внимание, что запущено несколько сеансов. Например,
Each user logged on as has a different session]
The services run in session '0'
Возможно, вы не установили точку останова в правильном сеансе.
Смотрите мою статью здесь для получения информации о том, почему вы получаете такое поведение:
http://www.osronline.com/article.cfm?id=576
Как правило, вам лучше отлаживать код пользовательского режима на целевом компьютере, поскольку это не всегда удобно.