问题标签 [executionengineexception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 托管 C# 代码中的致命执行引擎错误
我在 C# 的托管代码中遇到了访问冲突异常和致命的执行引擎错误(似乎是相同的错误)。我已将其缩小到以下片段。我错过了什么吗?我认为托管代码中不应出现此类异常。我在 .net 4.7 和 4.5 以及多台不同的计算机上都看到过它?这是 .Net 中的一个已知问题吗?
这个片段“通常”在一分钟内失败。
更新:它可能应该以 64 位运行。如果使用“任何 CPU”编译,则重现该问题需要更长的时间。
UPDATE2:使用我有:
.net - 将“开始”菜单中的项目拖到 WPF 应用程序上时崩溃
我遇到了一个奇怪的问题。当 Windows 开始菜单中的项目被拖到应用程序上时,它会崩溃。
但是,如果我从资源管理器中拖动一个文件,它会被正确处理(当它在我的应用程序上时,拖动的项目会显示一个红色圆圈,其中有一条线穿过它)。
这就是奇怪的事情发生的地方。现在我已经尝试从资源管理器中拖动文件,当我尝试从“开始”菜单中拖动项目时,程序不会崩溃。仅当应用程序启动后的第一个拖动项来自“开始”菜单时,它才会崩溃。
窗口和里面的所有控件都有AllowDrop="False"
。我已经尝试在最外面的控件上添加事件处理程序,但是断点永远不会被命中DragOver
。DragEnter
这是我得到的例外:
托管调试助手'FatalExecutionEngineError':'运行时遇到致命错误。错误地址位于线程 0x59f4 上的 0xc789d078。错误代码为 0x80131623。此错误可能是 CLR 中的错误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM-interop 或 PInvoke 的用户封送错误,这可能会损坏堆栈。
其次是这个例外:
System.ExecutionEngineException:“引发了‘System.ExecutionEngineException’类型的异常。”
应用程序退出。
我使用的是 Windows 10 和 64 位。.NET 框架 4.7.2
调用堆栈:
.net - .NET 应用程序崩溃并出现 0x80131506 错误 (ExecutionEngineException)
我们的 .NET 应用程序随机崩溃并出现 ExecutionEngineException 错误。应用面向 .NET 4.8 x64。
经过一些密集的复制尝试,我收集了以下事实。
- 我们使用带有 Time Travel 功能的 WinDBG Preview 来捕获执行历史记录。
- 我们分析了一些使用 AdPlus 收集的应用程序崩溃,其中断点设置为:
clr!EEPolicy::HandleFatalError
- 应用程序使用这些环境变量集执行:
- 作为额外的压力测试,我们添加了定期(每 10 秒一次)LOH 压缩:
- 应用程序崩溃调用堆栈在所有情况下都如下所示:
- 在崩溃分析之后,我们观察到它在进行对象年龄验证时会崩溃。
- 我们调查了来自 CLR VM 和 SSCLI (handletablescan.cpp) 的可用资源。
- 应用程序使用 WCF ServiceHost 和 NamedPipes 通道。
- 它崩溃的原因如下:
- 年龄验证启动 (VerifyObjectAndAge) 并在第 2 代上找到 OverlappedData 对象。此外,它的当前“clump”年龄似乎为 2(来自 BlockVerifyAgeMapForBlocksWorker 源),用作 minAge。
- 然后找到m_userObject字段值,等于object[],设置在:
System.ServiceModel.Channels.OverlappedContext..ctor()
通过调用this.nativeOverlapped = this.overlapped.UnsafePack(completeCallback, this.bufferHolder);
- 该 object[] 配置为:
this.bufferHolder = new object[] { dummyBuffer };
- dummyBuffer 在 OverlappedContext 中定义
private static byte[] dummyBuffer;
。 - 它分配在CLR 堆的临时段上。
- 然后调用:
GCHeap::GetGCHeap()->WhichGeneration(obj);
返回 0,因为 'dummyBuffer' 不在 GC 生成 0、1 或 2 上。 - VerifyObjectAndAge 调用:
EEPOLICY_HANDLE_FATAL_ERROR(COR_E_EXECUTIONENGINE)
因为 minAge(从丛中预期为 2),但 'dummyBuffer' 年龄报告为 0。
问: 为什么会这样?如何解决?
旁注:应用程序使用新的 AppDomain 加载其模块。如果应用程序尝试使用工作逻辑卸载和加载 AppDomain,则会更频繁地发生崩溃。但是,如果没有域重新加载操作,我们就会崩溃。此外,VerifyObjectAndAge 逻辑应该更频繁地执行,但仅在一段时间后才会失败。
非常感谢您的任何想法。
c# - C# 中图表的 System.ExecutionEngine 异常
我正在尝试绘制传感器数据的实时绘图。UI 由图表、开始和停止按钮组成。
当按下开始按钮时,来自传感器的数据会使用 100 毫秒的计时器绘制在图表上。但它会引发类似系统执行引擎异常的异常。如果我用 while(true) 循环替换更新值的计时器方式,则没有例外或其他问题。但在这种情况下,我将失去对 UI 其他部分的控制,因为我只使用 1 个线程。
欢迎提出建议/意见/帮助!