visual-studio-2015 - VS2015 在编辑源代码时崩溃并显示 "A new guard page..."

标签 visual-studio-2015 roslyn code-contracts

问题:

Visual Studio 2015 不断崩溃并出现以下错误:

无法为堆栈创建新的保护页面

背景:

在其他上下文中已经存在一些关于此错误的问题,但它们似乎都与 Visual Studio 中的旧版 COM 代码或设计器工具的互操作有关。我只是想编辑 C# 源文件。

Windows service / A new guard page for the stack cannot be created

A new guard page for the stack cannot be created

以前,我仅在使用 Code Contracts XML 文档工具 ccdocgen.exe 时看到此错误。当我使用VS2013和ccdocgen时,构建时偶尔会出现错误,但只会崩溃ccdocgen,而不是VS。升级到 VS2015 后,如果我使用 ccdocgen,在构建任何使用匿名方法的东西时,我经常会看到它,但到目前为止,它仍然只是使 ccdocgen 崩溃,而不是 VS。另外值得指出的是,当 ccdocgen 构建时抛出错误时,错误对话框看起来略有不同。

上下文:

我目前正在研究的解决方案使用代码契约作为前置条件和后置条件,但根本不使用静态检查器。我在编辑代码时遇到此错误,仅执行简单的操作,例如键入、选择文本、使用 Ctrl+CCtrl+X。自此开始,我已经禁用了我当前正在处理的项目上的所有代码契约工具(但不是整个解决方案中的),但错误仍然偶尔出现。

根据有关此错误消息的其他问题的答案,它是由某处堆栈溢出引起的。由于这个错误是在编辑文本时发生的,而且自从我迁移到 VS2015 后我才遇到这个错误,所以我的假设是它与 Roslyn 正在执行的一些后台解析有关。

一些代码:编辑:我在注释掉此属性的两个版本时都遇到了错误,所以不是这样。

我认为这是导致问题的成员:

public DataView JoinedRecords =>
    (from r1 in Table1.AsEnumerable()
    join r2 in Table2.AsEnumerable()
           on r1.Field<int>("ID") equals r2.Field<int>("ID")
    where r2.Field<bool>("IsPending")
    select r1)
    .CopyToDataTable().AsDataView();

如果我删除查询语法,它抛出错误的频率就会降低:

public DataView JoinedRecords =>
    query = Table1.AsEnumerable()
        .Join(Table2.AsEnumerable(),
            r1 => r1.Field<int>("ID"),
            r2 => r2.Field<int>("ID"),
            (r1, r2) => r1)
        .CopyToDataTable().AsDataView();

问题:

  • 其他人也遇到过这个问题吗?
  • 我认为这是 Roslyn 问题吗?
  • 如何获取有关崩溃的更多数据?我可以找到方便的 VS 错误日志吗?
  • 我错过了什么吗?

编辑:其他故障排除步骤

按照这篇文章 ( Visual Studio 2015 Not Working ) 的建议,我使用崩溃记录器将问题发送给 Microsoft。

我还使用 /log 参数运行 VS,并在日志中发现了 2 个错误,但它们听起来不太相关。

<entry>
    <record>563</record>
    <time>2016/06/29 16:00:08.841</time>
    <type>Error</type>
    <source>Extension Manager</source>
    <description>Extension will not be loaded because an extension with the same ID &apos;Microsoft.Windows.DevelopmentKit.Desktop&apos; is already loaded at C:\PROGRAM FILES (X86)\COMMON FILES\MICROSOFT\EXTENSIONMANAGER\EXTENSIONS\MICROSOFT\WINDOWS KITS\8.0\DESKTOP SDK\...</description>
    <path>C:\PROGRAM FILES (X86)\COMMON FILES\MICROSOFT\EXTENSIONMANAGER\EXTENSIONS\MICROSOFT\WINDOWS KITS\8.1\DESKTOP SDK\</path>
  </entry>
  <entry>
    <record>564</record>
    <time>2016/06/29 16:00:09.587</time>
    <type>Error</type>
    <source>Color Theme Service</source>
    <description>The color &apos;Popup&apos; in category &apos;de7b1121-99a4-4708-aedf-15f40c9b332f&apos; does not exist.     </description>
  </entry>

编辑 2:更多详细信息

错误对话框: enter image description here

我还注意到,当弹出错误对话框时,但在单击“确定”之前,许多 Visual Studio 进程在任务管理器中看起来仍然正常。 devenvPerfWatsonVsHubMicrosoft.VsHub.Server.HttpHost 均仍在运行,并且工作状态存在波动设置、句柄和线程统计信息。 VBCSCompilerMSBuild 仍在运行,但没有波动(通常是不运行构建时的情况)。

编辑:

VS2015 Update 1 和升级到 Update 3 后均出现此问题。

问题出在 Code Contracts v1.9 上,尝试卸载并重新安装 CC 1.9,但没有效果。

可能的修复?

安装了 CC v1.10-RC2,我已经工作了几分钟,VS 没有崩溃。

出现以下情况时将发布后续内容:

  • 发生更多崩溃,或者最好发生更多崩溃
  • 我一整天的工作都没有崩溃

最佳答案

Am I right in believing this is a Roslyn issue?

我认为罗斯林不太可能是这个问题的直接原因。尤其是因为这个数据。

When I was using VS2013 with ccdocgen, the error came up occasionally when building, but it would only crash ccdocgen, not VS

Roslyn 直到 VS2015 才发布。在此之前,编译器是一段完全不同的代码( native 与托管)。虽然两个编译器可能都存在相同的错误,但这种特定类型的问题不太可能出现。

我认为这更可能是代码契约(Contract)的问题。特别是 Roslyn 和 native 编译器会生成导致代码契约问题的相同 IL 序列。

我将将此情况通知代码契约(Contract)团队,看看他们的分析是什么。

关于visual-studio-2015 - VS2015 在编辑源代码时崩溃并显示 "A new guard page...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38103495/

相关文章:

asp.net - ActionLink 为属性路由生成错误的 URL

.NET Framework 4.6.1 版未出现在 VS 2015 中

roslyn - MSBuildWorkspace.Create() 抛出异常

c# - 重写期间的 CodeContracts 元数据错误

JavaScript 代码契约库?

javascript - Visual Studio 2017 上的 JSLint

c# - 空的 Outlook 加载项会导致立即崩溃

c# - 评估来自字符串的嵌套属性调用

c# - 罗斯林 C# : How to get all fields and properties (and their belonging class) accessed by a method

c# - 确保对象不变?