ICorProfilerCallback2: невозможно различить обработанное и необработанное исключение от событий исключения - PullRequest
0 голосов
/ 02 апреля 2019

Я использую ICorProfilerCallback2 интерфейс для реализации профилировщика для мониторинга всех необработанных / необработанных исключений, возникающих в любом приложении .net.Событие ExceptionThrown помогает мне найти все исключения (исключения, вызванные или не встречающиеся), возникшие в программе.Но мне нужно захватывать только необработанные исключения.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

В дополнение к событию ExceptionThrown, которое генерируется при возникновении исключения, существуют и другие связанные события - в основном, ExceptionCatcherEnter / ExceptionCatcherLeave, ExceptionSearchFunction * и ExceptionUnwind *. Они выбрасываются, когда происходит соответствующее событие. Если инициируется событие ExceptionCatcher *, исключение перехватывается. Если исключение полностью не обработано, поток или программа будут прерваны. В этих случаях вы можете использовать методы ThreadDestroyed и Shutdown. Вам нужно будет найти способ сохранить текущую информацию во время ExceptionThrown (сопоставление между ThreadId и текущим состоянием / данными исключения, будьте осторожны, чтобы не хранить ничего, что будет признано недействительным), и обрабатывать информацию только в одном из более поздних обратных вызовов.

0 голосов
/ 02 апреля 2019

Для этого вам не нужно использовать API профилирования. Кроме того, это событие профилирования срабатывает, когда исключение создается впервые. В то время неизвестно, будет ли он обработан или нет.

Чтобы отслеживать необработанные исключения, установите обработчик в AppDomain.CurrentDomain.UnhandledException.

...