Могу ли я остановить COM от проглатывания исключенных исключений C ++ в процессе вызова?

Могу ли я остановить COM от проглатывания исключенных исключений C ++ в процессе вызова?

Ответов: 6


3 принят

Это как раз через полтора года после того, как вопрос был задан -

Раймонд Чен написал сообщение о том, как « отключить обработчик исключений, который COM« помогает »обернуть вокруг вашего сервера ». Похоже на окончательный ответ на вопрос. Если не для OP, для будущих читателей.


2

Я не думаю, что вы можете отключить это поведение, но есть способ обойти его, если вы используете Visual Studio и не против того, чтобы его заливали исключениями. Если вы перейдете в «Отладка»> «Исключения в VS» и выберите «Когда генерируется исключение>« Разрыв в отладчике »для исключений C ++, он попадет в отладчик в момент, когда будет выбрано исключение. К сожалению, вы затем можете определить, какие исключения вы можете игнорировать и какие из них представляют для вас интерес.

Значение по умолчанию для этого: «Продолжить» с «Если исключение не обрабатывается», которое установлено в «break into the debugger». Если он этого не сделает, это уже предполагает, что вам нужно будет выяснить, где именно были обнаружены исключения.


2

Если я правильно понимаю, ваша проблема заключается, по сути, в невозможности получить трассировку стека из исключения C ++. Я никогда не пробовал это сам, но на самом деле можно получить трассировку стека даже из блока catch.

См. Получение стека вызовов исключений из блока catch

В статье описывается процесс получения трассировки стека с помощью отладчика, но если вы не хотите, чтобы он был прикреплен, вы можете создать дамп в предложении catch (в одну сторону , другой ), а затем пройти процесс в свободное время ,


1

Посмотрите на Vectored Exception Handlers - в зависимости от вашего конкретного варианта использования, VEH можно использовать для перехвата обработки исключений SEH и сбоев / сбросов сил и т. Д.


0

Вы можете настроить разрыв 2-го уровня в отладчике с помощью sxe / sxd -c2 eh, который будет захватывать только необработанные исключения C ++. Вы также можете приложить отладчик «на лету» к вашему процессу во время загрузки с помощью GFlags . Конечно, вам придется отказаться от отладчика мыши-микки и использовать реальную сделку .

C ++, исключение, ком,
Похожие вопросы