Основной цикл отладчика - PullRequest
2 голосов
/ 03 мая 2011

Я пытаюсь реализовать в c ++ / Windows «основной цикл отладчика», описанный в этой статье: Запись основного цикла отладчика

Но я хочу, чтобы любое выброшенное исключение отображалосообщение об ошибке на экране и быть пойман отладчиком.Я понял, что могу сделать это, задав ContinueDebugEvent некоторое значение DBG _ ???но я не знаю, что это такое.
Что это за значение?

Я также заметил, что консольные приложения уведомляют отладчик об исключениях, когда что-то записывается в консоль.Как я могу отфильтровать фактическое исключение из этих вещей?Имеет ли это какое-либо отношение к значению «первого шанса»?
спасибо:)

1 Ответ

4 голосов
/ 29 июля 2011

Отладчик получает событие исключения для каждого исключения, которое происходит в отладчике.Если вы передадите DBG_CONTINUE в ContinueDebugEvent, отладчик проглотит исключение, и выполнение продолжится, как если бы исключение не произошло в первую очередь.Это означает, что отладчик также не уведомлен об этом.Если, с другой стороны, вы передаете DBG_EXCEPTION_NOT_HANDLED, отладчик уведомляется и отвечает за обработку исключения.

Теперь, если отладчик не обрабатывает (читай: ловим) исключение,Отладчик получает уведомление во второй раз, на этот раз с Event.u.Exception.dwFirstChance, установленным в 0. В этот момент исключение завершит процесс, если вы передадите DBG_EXCEPTION_NOT_HANDLED.

Две вещи, которые следует иметь в виду:

  • Обычный способ передачи строки отладчику - OutputDebugString.Нет необходимости использовать определяемые пользователем исключения, если вам не нужно передавать что-то, кроме строки.
  • Если вы планируете выдавать собственное исключение для передачи определенных событий отладчику, проверьте Event.u.Exception.ExceptionRecord.ExceptionCode и посмотрите,он соответствует вашему предопределенному типу исключения и в этом случае используется DBG_CONTINUE.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...