如何找到ExecutionEngineException的原因

时间:2014-12-24 05:22:22

标签: c# .net wpf exception-handling

我有一个WPF应用程序(.net 4.0),它在Windows 7系统上运行良好。但是当我尝试运行应用程序Windows 8.1时它工作正常15到20分钟,但在那之后突然出现一条弹出消息,如

  

问题导致程序无法正常工作。如果解决方案可用,Windows将关闭程序并通知您

弹出消息显示有两个选项Debug和close program。当我按下调试时,它显示消息为检测到FatalExecutionEngineError

  

运行时遇到了致命错误。在线程0x23624上,错误的地址为0x713543ed。错误代码是0xc0000005。此错误可能是CLR中的错误,也可能是用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈。

如果我按继续进一步显示消息

未处理的类型' System.ExecutionEngineException'发生在PresentationFramework.dll

但我没有弄清楚它失败的原因以及导致问题的部分代码?

通过网络搜索后,我尝试了以下

添加了DispatcherUnhandledException处理程序和App域Unhandled异常处理程序,并添加了legacyUnhandledExceptionPolicy。但是,对于我仍然面临Windows 8.1崩溃的任何事情都没有用。

有人能指出我如何检测导致崩溃的代码部分吗?以及如何处理FatalExecutionEngineEror异常?

修改

CLR版本在Windows 7和8.1中使用的是4.0.30319

1 个答案:

答案 0 :(得分:0)

由于问题与引起异常的原因有关,所以我可以展示我的步骤以使用WPF应用程序(使用WebBrowser控件和COM互操作)来确定问题。首先,在Debugging-General-Just My Code中禁用 Just My Code选项。然后运行失败的代码,并在“调用堆栈”窗口中检查哪种方法导致崩溃。 enter image description here之后,请查看.NET source处的方法实现。在我的情况下,Invariant.Assert调用(源为here)抛出ExecutionEngineException并终止了进程。现在,此异常已过时,而使用了Environment.FailFast方法。根据MSDN

  

此方法可终止进程,而无需运行任何活动的try / finally块或终结器。

因此,您无法正确处理它,只有Windows应用程序事件日志可以提供帮助