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


Вход в отладчик

Код пользовательского режима и режима ядра используют различные подпрограммы для входа в отладчик.

User-Mode подпрограммы останова

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

Чтобы перейти к отладчику из программы пользовательского режима, используйте функцию DebugBreak. Его прототип выглядит следующим образом:

VOID DebugBreak(VOID);

Когда программа в пользовательском режиме вызывает DebugBreak, будут выполняться следующие возможные действия:

  1. Если отладчик в пользовательском режиме подключен, программа перейдет в режим отладки. Это означает, что программа приостанавливается, а отладчик станет активным.

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

  3. Если отладчик пользовательского режима не подключен, а отладка в режиме ядра не включена, программа завершится с необработанным исключением, и посмертный (just-in-time) отладчик будет активирован. Дополнительные сведения см. в разделе Включение посмертной отладки.

Kernel-Mode Рутины прерывания

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

Подпрограмма DbgBreakPoint работает в коде в режиме ядра, но в противном случае аналогична подпрограмме пользовательского режима DebugBreak .

Подпрограмма DbgBreakPointWithStatus также вызывает разрыв, но он также отправляет 32-разрядный код состояния отладчику.

Подпрограммы KdBreakPoint и KdBreakPointWithStatus идентичны DbgBreakPoint и DbgBreakPointWithStatus соответственно при компиляции в проверенной среде сборки. При компиляции в среде бесплатной сборки они не влияют.

Kernel-Mode Условные операции прерывания

Для кода в режиме ядра доступны две подпрограммы условного останова. Эти подпрограммы проверяют логическое выражение. Если выражение равно false, выполнение останавливается, а отладчик становится активным.

  • Макрос ASSERT проверяет логическое выражение. Если выражение ложно, выполнение останавливается, а отладчик активируется. Неудачное выражение и его расположение в программе отображаются в отладчике.

  • Макрос ASSERTMSG идентичен ASSERT , за исключением того, что он позволяет отправлять дополнительное сообщение отладчику.

ASSERT и ASSERTMSG активны только при компиляции в проверенной среде сборки. При компиляции в среде бесплатной сборки они не влияют.