问题标签 [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.

0 投票
1 回答
447 浏览

c# - 托管 C# 代码中的致命执行引擎错误

我在 C# 的托管代码中遇到了访问冲突异常和致命的执行引擎错误(似乎是相同的错误)。我已将其缩小到以下片段。我错过了什么吗?我认为托管代码中不应出现此类异常。我在 .net 4.7 和 4.5 以及多台不同的计算机上都看到过它?这是 .Net 中的一个已知问题吗?

这个片段“通常”在一分钟内失败。

更新:它可能应该以 64 位运行。如果使用“任何 CPU”编译,则重现该问题需要更长的时间。

UPDATE2:使用我有:

用途

0 投票
1 回答
232 浏览

.net - 将“开始”菜单中的项目拖到 WPF 应用程序上时崩溃

我遇到了一个奇怪的问题。当 Windows 开始菜单中的项目被拖到应用程序上时,它会崩溃。

但是,如果我从资源管理器中拖动一个文件,它会被正确处理(当它在我的应用程序上时,拖动的项目会显示一个红色圆圈,其中有一条线穿过它)。

这就是奇怪的事情发生的地方。现在我已经尝试从资源管理器中拖动文件,当我尝试从“开始”菜单中拖动项目时,程序不会崩溃。仅当应用程序启动后的第一个拖动项来自“开始”菜单时,它才会崩溃。

窗口和里面的所有控件都有AllowDrop="False"。我已经尝试在最外面的控件上添加事件处理程序,但是断点永远不会被命中DragOverDragEnter

这是我得到的例外:

托管调试助手'FatalExecutionEngineError':'运行时遇到致命错误。错误地址位于线程 0x59f4 上的 0xc789d078。错误代码为 0x80131623。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM-interop 或 PInvoke 的用户封送错误,这可能会损坏堆栈。

其次是这个例外:

System.ExecutionEngineException:“引发了‘System.ExecutionEngineException’类型的异常。”

应用程序退出。

我使用的是 Windows 10 和 64 位。.NET 框架 4.7.2

调用堆栈:

0 投票
0 回答
524 浏览

.net - .NET 应用程序崩溃并出现 0x80131506 错误 (ExecutionEngineException)

我们的 .NET 应用程序随机崩溃并出现 ExecutionEngineException 错误。应用面向 .NET 4.8 x64。

经过一些密集的复制尝试,我收集了以下事实。

  1. 我们使用带有 Time Travel 功能的 WinDBG Preview 来捕获执行历史记录。
  2. 我们分析了一些使用 AdPlus 收集的应用程序崩溃,其中断点设置为:

clr!EEPolicy::HandleFatalError

  1. 应用程序使用这些环境变量集执行:
  1. 作为额外的压力测试,我们添加了定期(每 10 秒一次)LOH 压缩:
  1. 应用程序崩溃调用堆栈在所有情况下都如下所示:
  1. 在崩溃分析之后,我们观察到它在进行对象年龄验证时会崩溃。
  2. 我们调查了来自 CLR VM 和 SSCLI (handletablescan.cpp) 的可用资源。
  3. 应用程序使用 WCF ServiceHost 和 NamedPipes 通道。
  4. 它崩溃的原因如下:
    • 年龄验证启动 (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 逻辑应该更频繁地执行,但仅在一段时间后才会失败。

非常感谢您的任何想法。

0 投票
2 回答
157 浏览

c# - C# 中图表的 System.ExecutionEngine 异常

我正在尝试绘制传感器数据的实时绘图。UI 由图表、开始和停止按钮组成。

当按下开始按钮时,来自传感器的数据会使用 100 毫秒的计时器绘制在图表上。但它会引发类似系统执行引擎异常的异常。如果我用 while(true) 循环替换更新值的计时器方式,则没有例外或其他问题。但在这种情况下,我将失去对 UI 其他部分的控制,因为我只使用 1 个线程。

欢迎提出建议/意见/帮助!