. Вы можете использовать API профилирования .net для получения уведомлений об исключениях во всех состояниях. Доступны следующие методы:
ExceptionThrown
ExceptionSearchFunctionEnter
ExceptionSearchFunctionLeave
ExceptionSearchFilterEnter
ExceptionSearchFilterLeave
ExceptionSearchCatcherFound
ExceptionOSHandlerEnter
ExceptionOSHandlerLeave
ExceptionUnwindFunctionEnter
ExceptionUnwindFunctionLeave
ExceptionUnwindFinallyEnter
ExceptionUnwindFinallyLeave
ExceptionCatcherEnter
ExceptionCatcherLeave
ExceptionCLRCatcherFound
ExceptionCLRCatcherExecute
Использование профилирующего API не совсем для слабонервных; обратите внимание на http://msdn.microsoft.com/en-us/library/ms404386.aspx в качестве отправной точки для вашего исследования и http://msdn.microsoft.com/en-us/library/bb384687.aspx специально для обработки исключений.
Я не знаю простого способа сделать это в вашем управляемом коде, например
AppDomain.FirstChanceException += new EventHandler...
событие или подобное.
РЕДАКТИРОВАТЬ: возможно, лучшей альтернативой является использование API неуправляемой отладки .
По сути, вы можете установить ICorManagedCallback / ICorManagedCallback2 с помощью ICorDebug :: SetManagedHandler и получать обратные вызовы при возникновении исключений.
Я недостаточно опытен в этой области, чтобы знать, какие преимущества / недостатки перед API профилирования.
Я только что посмотрел на mdgb образец , который использует API ICorDebug, и кажется, что он получает достаточно уведомлений от исключений (чтобы быстро увидеть, какие события происходят, установите точку останова в методе HandleEvent в corapi /Debugger.cs:406)