VS2015与"新的防守页面崩溃..."何时编辑源代码

时间:2016-06-29 15:07:00

标签: 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。自从那个开始以来,我已经禁用了我目前正在处理的项目中的所有代码合同工具(但不是在整个解决方案中),但错误仍然偶尔会出现。< / p>

根据有关此错误消息的其他问题的答案,它是由某处的堆栈溢出引起的。由于在编辑文本时发生了这个错误,而且我已经进入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();

问题:

  • 还有其他人有这个问题吗?
  • 我是否相信这是一个罗斯林问题?
  • 如何获得有关崩溃的更多数据?我能找到一个方便的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崩溃。

将在以下任何一方发布后续行动:

  • 发生更多崩溃,或者最好
  • 我在没有崩溃的情况下度过了整整一天的工作

2 个答案:

答案 0 :(得分:3)

  

我是否相信这是罗斯林问题?

我认为Roslyn不太可能是导致这个问题的直接原因。特别是因为这条数据。

  

当我使用带有ccdocgen的VS2013时,在构建时偶尔出现错误,但它只会崩溃ccdocgen,而不是VS

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

我认为这更可能是代码合约的问题。特别是Roslyn和本机编译器产生的IL序列相同,导致Code Contracts出现问题。

我将通知代码合同团队,了解他们的分析。

答案 1 :(得分:0)

我有同样的问题。我处理了递归调用。错误消失了。 因此,我建议您在开始的任何递归函数中添加一些退出点。 或者只是尝试评论递归调用, 要验证这种情况的发生仅仅是由于递归调用引起的堆栈溢出。

如果不是递归调用,则可能是无限循环。

祝你好运!