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


Переход к отладчику

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

процедуры User-Mode прерывания

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

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

VOID DebugBreak(VOID);

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

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

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

  3. Если отладчик в пользовательском режиме не подключен и отладка в режиме ядра не включена, программа завершится с необработанным исключением и будет активирован отладчик post-mortem (JIT). Дополнительные сведения см. в разделе Включение postmortem Debugging.

процедуры Kernel-Mode прерывания

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

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

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

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

Kernel-Mode подпрограммы условного прерывания

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

  • Макрос ASSERT проверяет логическое выражение. Если выражение имеет значение false, выполнение останавливается и отладчик становится активным. Выражение, завершилось сбоем, и его расположение в программе отображаются в отладчике.

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

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