System.ExecutionEngineException失败

35 .net exception execution

我一直在努力寻找更多有关这个问题的信息,而且我没有太多运气.我一直在阅读应用程序不应该出现此错误,虽然这一切都很好,花花公子,它并没有告诉我什么可以导致此错误出现.

我知道这个问题非常广泛,因为我确信这个错误可能有多种原因,所以我会尝试将其缩小一点.

我正在VS2003中开发一个使用C++ .NET的应用程序

该应用程序主要使用非托管代码和很少的托管代码(由于垃圾收集器的严重干扰).所以我认为95%不受管理,5%管理

我已经读过某个地方,不稳定/错误/错误的非托管代码会弄乱部分CLR内存,导致它损坏并抛出此错误.

由于95%的应用程序是不受管理的,我不知道从哪里开始查看.也许在托管和非托管之间进行交互的几个类?如何将数据从托管编组到非托管?错误的空指针会导致此失败吗?还有什么其他问题可以导致 数组索引超出范围?Null对象怎么样?

任何可以提供System.ExecutionEngine失败的可能原因列表的信息/论文/文章将不胜感激!


基于答案,可以在多个场景中引起此异常,提及htem以获得更好的可见性.

可能的原因/情景清单 -

可能的解决方法/解决方案 -

小智 6

这不应该太认真,但我设法得到这个例外,同时享受反思的乐趣:

typeof(IntPtr).GetField("Zero").SetValue(null, new IntPtr(666));
Run Code Online (Sandbox Code Playgroud)


小智 5

有同样的问题 - 我的错误结果是我的C#代码和我的C++本机dll之间的参数不匹配.我在C++函数中添加了一个参数,但未能将其添加到C#端.


Ori*_*rds 2

老实说,我唯一一次看到此异常是在我使用 Compuware DevPartner 工具进行一些分析和代码分析时。DevPartner 深入到 CLR 的核心来完成它的工作,但它充满了错误,所以把 CLR 搞砸了。我必须重新启动计算机(并记住永远不要再单击 DevPartner 工具栏按钮)才能恢复正常。

如果您不使用 devpartner,那么您很可能有一些非托管代码,这些代码会浪费 CLR 使用的一些内存。我建议首先重新启动,然后尝试找出导致内存浪费的错误。查找缓冲区溢出、写入未初始化的指针以及所有其他常见的可疑情况。