我有一个使用 /clr 编译的 MFC 应用程序,并且我正在尝试为未捕获的托管异常实现最终处理程序。对于本机异常,重写CWinApp::ProcessWndProcException
works.
杰夫的书中提到的两个事件代码项目文章 http://www.codeproject.com/KB/exception/ExceptionHandling.aspx,Application.ThreadException
and AppDomain.CurrentDomain.UnhandledException
,没有提出。
任何人都可以建议一种为混合可执行文件提供最终托管异常处理程序的方法吗?
Update:
看来这些异常处理程序仅在下游触发Application.Run
或类似的(有一个工作线程风格,不记得名字了。)如果你想真正全局捕获托管异常,你确实需要安装 SEH 过滤器。你不会得到一个System.Exception
如果你想要一个调用堆栈,你将不得不推出你自己的步行器。
在关于此主题的 MSDN 论坛问题中,建议覆盖主 MFC 线程的足够低级别的点try ... catch (Exception^)
。例如,CWinApp::Run
。这可能是一个很好的解决方案,但我还没有考虑任何性能或稳定性影响。在退出之前,您将有机会使用调用堆栈进行日志记录,并且可以避免默认的 Windows 未处理的异常行为。
浏览一下互联网,您会发现您需要安装一个过滤器,以使非托管异常通过过滤器到达您的 AppDomain。从CLR 和未处理的异常过滤器 http://blogs.microsoft.co.il/blogs/sasha/archive/2007/12/30/clr-and-unhandled-exception-filters.aspx:
CLR依赖SEH未处理异常过滤机制来捕获未处理异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)