ICorProfilerCallback2:无法区分已处理和未处理的异常与异常事件

时间:2019-04-02 17:42:41

标签: .net clr clr-profiling-api

我正在使用 ICorProfilerCallback2 接口实现探查器,以监视所有.net应用程序中发生的所有未处理/未捕获的异常。 ExceptionThrown事件可帮助我查找程序中发生的所有异常(被嘲笑/未被嘲笑的异常)。但是我只需要捕获未处理的异常。

2 个答案:

答案 0 :(得分:0)

您不需要为此使用分析API。此外,当首次引发异常时,会触发该分析事件。当时尚不清楚是否会处理它。

要监视未处理的异常,请在AppDomain.CurrentDomain.UnhandledException中安装处理程序。

答案 1 :(得分:0)

除了在引发异常时引发的ExceptionThrown事件外,还有更多相关事件-主要是ExceptionCatcherEnter / ExceptionCatcherLeave,ExceptionSearchFunction *和ExceptionUnwind *。当相关事件发生时,将抛出它们。如果ExceptionCatcher *事件正在触发,则捕获异常。如果异常未被完全捕获,则线程或程序将终止。在这些情况下,可以使用ThreadDestroyed和Shutdown方法。您将需要找到一种在ExceptionThrown(ThreadId和当前异常状态/数据之间的映射,请注意不要存储任何将被无效的内容)之间存储当前信息的方法,并且仅在以后的回调之一中处理信息。