Отладчик получает событие исключения для каждого исключения, которое происходит в отладчике.Если вы передадите DBG_CONTINUE
в ContinueDebugEvent
, отладчик проглотит исключение, и выполнение продолжится, как если бы исключение не произошло в первую очередь.Это означает, что отладчик также не уведомлен об этом.Если, с другой стороны, вы передаете DBG_EXCEPTION_NOT_HANDLED
, отладчик уведомляется и отвечает за обработку исключения.
Теперь, если отладчик не обрабатывает (читай: ловим) исключение,Отладчик получает уведомление во второй раз, на этот раз с Event.u.Exception.dwFirstChance
, установленным в 0. В этот момент исключение завершит процесс, если вы передадите DBG_EXCEPTION_NOT_HANDLED
.
Две вещи, которые следует иметь в виду:
- Обычный способ передачи строки отладчику -
OutputDebugString
.Нет необходимости использовать определяемые пользователем исключения, если вам не нужно передавать что-то, кроме строки. - Если вы планируете выдавать собственное исключение для передачи определенных событий отладчику, проверьте
Event.u.Exception.ExceptionRecord.ExceptionCode
и посмотрите,он соответствует вашему предопределенному типу исключения и в этом случае используется DBG_CONTINUE
.