Переход к отладчику
Код в пользовательском режиме и режиме ядра использует различные подпрограммы для прерывания работы отладчика.
процедуры User-Mode прерывания
Подпрограмма прерывания вызывает исключение в текущем процессе, поэтому вызывающий поток может сообщить отладчику, связанному с вызывающим процессом.
Чтобы перейти в отладчик из программы в пользовательском режиме, используйте функцию DebugBreak. Его прототип выглядит следующим образом:
VOID DebugBreak(VOID);
Когда программа пользовательского режима вызывает DebugBreak, выполняются следующие возможные действия:
Если подключен отладчик в пользовательском режиме, программа войдет в отладчик. Это означает, что программа будет приостановлена, и отладчик станет активным.
Если отладчик пользовательского режима не подключен, но отладка в режиме ядра была включена во время загрузки, весь компьютер войдет в отладчик ядра. Если отладчик ядра не подключен, компьютер зависнет и ожидает отладчика ядра.
Если отладчик в пользовательском режиме не подключен и отладка в режиме ядра не включена, программа завершится с необработанным исключением и будет активирован отладчик post-mortem (JIT). Дополнительные сведения см. в разделе Включение postmortem Debugging.
процедуры Kernel-Mode прерывания
При прерывании работы программы в режиме ядра в отладчике вся операционная система зависает до тех пор, пока отладчик ядра не позволит возобновить выполнение. Если отладчик ядра отсутствует, это рассматривается как ошибка проверка.
Подпрограмма DbgBreakPoint работает в коде в режиме ядра, но в остальном похожа на подпрограмму DebugBreak в пользовательском режиме.
Подпрограмма DbgBreakPointWithStatus также вызывает прерывание, но дополнительно отправляет отладчику 32-разрядный код состояния.
Подпрограммы KdBreakPoint и KdBreakPointWithStatus идентичны dbgBreakPoint и DbgBreakPointWithStatus соответственно при компиляции в проверенной среде сборки. При компиляции в свободной среде сборки они не оказывают никакого влияния.
Kernel-Mode подпрограммы условного прерывания
Для кода в режиме ядра доступны две подпрограммы условного прерывания. Эти подпрограммы проверяют логическое выражение. Если выражение имеет значение false, выполнение останавливается и отладчик становится активным.
Макрос ASSERT проверяет логическое выражение. Если выражение имеет значение false, выполнение останавливается и отладчик становится активным. Выражение, завершилось сбоем, и его расположение в программе отображаются в отладчике.
Макрос ASSERTMSG идентичен assert, за исключением того, что он позволяет отправить дополнительное сообщение в отладчик.
ASSERT и ASSERTMSG активны только при компиляции в проверенной среде сборки. При компиляции в свободной среде сборки они не оказывают никакого влияния.