Visual Studio 无法使用调试器 (AccessViolationException)。随机顺序执行的代码

Visual Studio unable to use debugger (AccessViolationException). Code executing in random order

截至今天,我无法再使用 Visual Studio 调试任何 c# 代码。如果我使用调试器,可以命中断点,但一旦执行暂停,麻烦就来了。按 Step Into 或 Continue 通常会生成一个 AccessViolationException 表示内存已损坏并终止当前请求。如果我再 运行 一个进一步的网络请求,我将得到一个 SEHException (发生在未知模块中)。

更奇怪的是,如果 AccessViolationException 没有触发,显示下一条语句的程序计数器会随机跳转。然后代码以随机顺序执行! (直到它崩溃)。

如果没有命中断点,那么应用程序将 运行 在调试模式下很好(即使附加了调试器)。

我确信这不是代码问题。我实际上可以使用新项目和以下代码重现访问冲突:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello world");
        Console.WriteLine("Access violation"); // This will throw if breakpoint set
    }
}

删除VS缓存,删除.suo,清理,尝试安全模式。一个可能的怀疑是这是在一台 Windows 10 预览机器上,并且上周有一个更新。我不太确定还有什么地方可以用它来确认它,或者在不重新映像机器的情况下修复它。

Any CPU 更改为仅 x64 在我的 "Hello World" 测试项目中为我解决了这个问题。

为了开始我原来的项目,这实际上是一个网络项目,我不得不采取一些额外的步骤。

  1. 将项目中的所有库更新为 x64,而不仅仅是 Web 项目。
  2. 在 VS2013 中启用 64 位 IIS express Tools > Options > Projects & Solutions > Web Projects > Use 64 Bit IIS ...
  3. 通过控制面板 (Turn Windows Features On or Off) 安装 Internet Information Services Hostable Web Core。在执行此操作之前,以 HttpException (0x80004005): Specified argument was out of the range of valid values 形式启动 64 位 Web 项目时会出现错误。安装 HWC 修复了它。

仍然 none 更清楚为什么会发生这种情况,但至少我可以再次调试项目。

这个异常似乎不知从何而来,当然让我有些头疼,但我通过执行以下操作解决了我的问题:

  1. 进入受影响项目的属性
  2. 转到“调试”选项卡
  3. 取消选中 "Enable native code debugging"