为什么 Debug.Assert 不能使用 64 位? (没有加载符号)

Why doesn't Debug.Assert work with 64-bit? (No Symbols Loaded)

我在两台独立的 64 位机器(都是 运行ning VS2012)上重现了这个问题。方法如下:创建一个新的控制台应用程序,但其中没有任何内容:

using System.Diagnostics;
namespace ConsoleApplication2
{   class Program
    {   static void Main(string[] args)
        {
            Debug.Assert(false);
        }
    }
}

然后,打开项目设置,导航至 Build-> General -> Platform target:,然后 select x64(或者,select "Any CPU",并禁用 "Prefer 32-bit" 设置)和 运行 程序。

Assertion Failed 对话框出现,但点击 "Retry" 并没有进入代码,相反它只是打开一个 "No Symbols Loaded" window,上面写着 "Symbol loading skipped"(见下面的截图)。

如果我将 Platform target 更改为 x86(或 re-enable "Prefer 32-bit" 设置),断言再次开始正常工作。

备注:

  1. 我的 .pdb 文件似乎没问题;断点与任一设置都能完美工作。
  2. 如果我select 禁用仅我的代码,它仍然不起作用;它只是带我到 window 上面写着 "Source Not Available."

所以我的问题是,如何让调试断言进入 64 位应用程序中的代码?(或者为什么禁用 "Prefer 32-bit" 设置打破它?)

我无法解释为什么会这样,但是,我试过了,进入了代码,它只是在调用堆栈的更深处中断了一行:

如果调出调用堆栈 window,您可以导航到 Debug.Assert 失败的框架。