pal*_*now 5 c# exception-handling
通过订阅 AppDomain.Current.Domain UnhandledException 事件,我的 .net 应用程序有一个全局异常处理程序。有几次我看到我的应用程序崩溃了,但这个全局异常处理程序永远不会被命中。不确定它是否有帮助,但应用程序正在执行一些 COM 互操作。
我的理解是,只要我没有任何本地 catch 块吞下异常,就应该始终命中这个全局异常处理程序。关于我可能遗漏了什么导致这个处理程序从未被调用的任何想法?
CLR 并不是万能的,无法捕获非托管代码可能导致的所有异常。顺便说一句,通常是 AccessViolationException。仅当从托管代码调用非托管代码时,它才能捕获它们。不支持的情况是非托管代码旋转其自己的线程并且该线程导致崩溃。当您使用 COM 组件时,这种情况并非不可能发生。
从 .NET 4.0 开始,致命执行引擎异常不再导致触发 UnhandledException 事件。该异常被认为太糟糕了,不允许运行更多的托管代码。这是。传统上,StackOverflowException 会导致立即中止。
您可以从进程的 ExitCode 中对此进行一些诊断。它包含终止进程的异常的异常代码。0x8013yyyy 是托管代码引起的异常。0xc0000005 是访问冲突。等等。您可以使用 adplus(可从 Windows 调试工具下载)来捕获进程的小型转储。由于这可能是由 COM 组件引起的,因此与供应商合作对于解决此问题可能很重要。