2014-02-07 14 views
1

Я использую Windbg для отладки моего драйвера пользовательского режима (рассмотрим USB). Мой пакет драйверов (сборка отладки, 64 бит) имеет как код режима ядра, так и код пользовательского режима. Пакет был успешно установлен на моей целевой машине, и модуль тоже загрузился (как я могу проверить с помощью команды windbg: lm «). И я запускаю Windbg в режиме администратора на хосте и отлаживаю цель с помощью карты FireWire 1394.Нужно ли установить контрольную точку в драйвере режима ядра для отладки функции в ее пользовательской части режима (используя Windbg)?

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

Опять же, когда я закрываю &, перезагрузите приложение, только когда функция break-point функции драйвера ядра включена и ударит, удаляется функция драйвера режима пользователя. Но если его отключить, функция драйвера режима пользователя не будет удалена. Это происходит независимо от того, какие функции мы устанавливаем в точках разрыва в драйверах режима ядра или в режиме пользователя.

Почему это поведение, хотя модули правильно загружены? Нужно ли настраивать или проверять что-то так, что когда и когда я запускаю приложение, мне не нужно полагаться на часть режима ядра?

ответ

0

Я видел, как WinDBG ведет себя немного странно, когда дело доходит до отладки вызовов режима пользователя!

Одним быстрым предложением было бы: Если вы отлаживаете Vista или выше, обратите внимание, что выполняется несколько сеансов. Например,

Each user logged on as has a different session] 
The services run in session '0' 

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

1

Смотрите мою статью здесь для получения информации о том, почему вы получаете такое поведение:

http://www.osronline.com/article.cfm?id=576

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