我有一个使用/clr 编译的 MFC 应用程序,并且我正在尝试为其他未捕获的托管异常实现最终处理程序。对于 native 异常,重写 CWinApp::ProcessWndProcException
有效。
Jeff 的 CodeProject article 中建议的两个事件,Application.ThreadException
和 AppDomain.CurrentDomain.UnhandledException
不会引发。
任何人都可以建议一种为混合可执行文件提供最终托管异常处理程序的方法吗?
<小时/>更新:
看来这些异常处理程序仅在 Application.Run
或类似的下游触发(有一个工作线程风格,不记得名称了。)如果您想真正全局捕获托管异常(exception)情况,您确实需要安装 SEH 过滤器。您不会得到System.Exception
,如果您想要一个调用堆栈,您将不得不滚动您自己的walker。
在关于此主题的 MSDN 论坛问题中,建议在 try ... catch (Exception^)
中覆盖主 MFC 线程的足够低级别的点。例如,CWinApp::Run
。这可能是一个很好的解决方案,但我还没有考虑任何性能或稳定性影响。在退出之前,您将有机会使用调用堆栈进行日志记录,并且可以避免默认的 Windows 未处理异常行为。
最佳答案
浏览一下互联网,您会发现您需要安装一个过滤器,以使非托管异常在到达您的 AppDomain 的过程中通过过滤器。来自 CLR and Unhandled Exception Filters :
The CLR relies on the SEH unhandled exception filter mechanism to catch unhandled exceptions.
关于exception - 混合 native /托管可执行文件中的最终托管异常处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8704/