我有一个用 /clr 编译的 MFC 应用程序,我正在尝试为其他未捕获的托管异常实现最终处理程序。对于本机异常,覆盖CWinApp::ProcessWndProcException
有效。
Jeff 的CodeProject 文章中建议的两个事件,Application.ThreadException
和AppDomain.CurrentDomain.UnhandledException
, 没有引发。
谁能建议一种为混合可执行文件提供最终托管异常处理程序的方法?
更新:
似乎这些异常处理程序仅在下游Application.Run
或类似情况下触发(有工作线程风格,不记得名称。)如果您想真正全局捕获托管异常,则需要安装 SEH 过滤器。你不会得到一个System.Exception
,如果你想要一个调用堆栈,你将不得不滚动你自己的助行器。
在有关此主题的 MSDN 论坛问题中,建议覆盖try ... catch (Exception^)
. 例如,CWinApp::Run
. 这可能是一个很好的解决方案,但我没有研究过任何性能或稳定性影响。在保释之前,您将有机会使用调用堆栈进行日志记录,并且可以避免默认的 windows unahndled 异常行为。