KeyVaultClient 在调试时随机抛出 FatalExecutionEngineError

Posted

技术标签:

【中文标题】KeyVaultClient 在调试时随机抛出 FatalExecutionEngineError【英文标题】:KeyVaultClient throws FatalExecutionEngineError on debug randomly 【发布时间】:2019-11-12 18:34:50 【问题描述】:

当我调试 ASP.NET MVC 应用程序时,KeyVaultClient 随机抛出异常:

Managed Debugging Assistant 'FatalExecutionEngineError' : '运行时遇到致命错误。错误地址位于线程 0x6098 上的 0x59eab403。错误代码为 0xc0000005。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户封送错误,这可能会损坏堆栈。'

我用:

nuget Microsoft.Azure.KeyVault3.0.3 Visual Studio 2019 专业版 16.1.4 Microsoft.AspNet.WebApi5.2.3 没有托管兼容模式

我熟悉了this question,但没有任何帮助。


编辑

启用托管兼容模式后,我得到的错误略有不同:

托管调试助手“FatalExecutionEngineError”在“C:\Program Files (x86)\IIS Express\iisexpress.exe”中检测到问题。 附加信息:运行时遇到致命错误。错误地址位于线程 0x54a8 上的 0x6c0db403。错误代码为 0xc0000005。此错误可能是 CLR 或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户封送错误,这可能会损坏堆栈。 发生了

【问题讨论】:

【参考方案1】:

新的托管调试引擎使我们能够比旧实现更快速地添加新功能。这可以从 Visual Studio 2013 仅一年后引入的功能数量就可以看出,包括托管返回值、.NET 64 位编辑和 Continue, Async Callstacks 增强功能以​​及改进的任务窗口等很少。不幸的是,新的调试引擎仍然不支持一些场景,因此在这些情况下,您将不得不切换回旧引擎。

您得到的错误是由于新的调试引擎不支持的问题。

请尝试以下设置,看看是否会出现相同的错误。

要全局切换回旧版调试引擎,请选择工具/选项

然后选中调试/常规选项卡上的使用托管兼容模式。

全局选项将强制使用旧引擎进行任何启动或附加。

希望对你有帮助。

【讨论】:

我必须承认,事情发生了变化。而不是我上面描述的错误,我得到:Managed Debugging Assistant 'FatalExecutionEngineError' has detected a problem in 'C:\Program Files (x86)\IIS Express\iisexpress.exe'. Additional Information: The runtime has encountered a fatal error. The address of the error was at 0x6c0db403, on thread 0x54a8. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack. occurred

以上是关于KeyVaultClient 在调试时随机抛出 FatalExecutionEngineError的主要内容,如果未能解决你的问题,请参考以下文章

使用KeyVaultClient定义Azure KeyVault密钥上的策略

为啥 Dash 在通过 PyCharm 调试时会抛出 TypeError? [关闭]

GetRequestStream 随机抛出 Timeout 异常

当它被抛出和捕获时,不要在那个异常处停止调试器

Plot.ly API 在创建图形时随机抛出 JSON 解码错误

Blazor Hybrid ElementReferenceJsonConverter 仅在调试时抛出异常