exception - 混合 native /托管可执行文件中的最终托管异常处理程序?

标签 exception executable mixed unhandled

我有一个使用/clr 编译的 MFC 应用程序,并且我正在尝试为其他未捕获的托管异常实现最终处理程序。对于 native 异常,重写 CWinApp::ProcessWndProcException 有效。

Jeff 的 CodeProject article 中建议的两个事件,Application.ThreadExceptionAppDomain.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/

相关文章:

powershell - 为什么 PowerShell 在命令行上以不同方式处理空字符串?

executable - 如何使用 AutoHotkey 创建独立的 exe?

python - 如何将 python 文件及其依赖项打包到单个可执行文件中?

javascript - 从与字符串混合的数组中提取数字 - Javascript

c++ - 编写死亡测试以验证 std::set_terminate 行为

php - 异常代码的严重性

c# - 访问可能存在也可能不存在的子元素时避免对象空引用异常

http - 使用 "reversed"混合内容(向 HTTPS 网站提供主动和被动 HTTPS 内容)

Python-将带分数转换为 float

javascript - Javascript 中是否存在无法捕获的异常?