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

时间:2015-10-13 22:27:25

标签: visual-studio-2012 .net-4.5 visual-studio-debugging debug-symbols

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

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

然后,打开项目设置,导航到构建 - >一般 - >平台目标:,然后选择x64(或者,选择“任何CPU”,并禁用“首选32位”设置),然后运行程序。

出现Assertion Failed对话框,但点击“重试”不会破坏代码,而只是打开一个“无符号加载”窗口,显示“跳过符号加载”(见下面的屏幕截图)。 Symbol loading for optimized module System.dll was skipped because Just My Code is enabled

如果我将平台目标更改为x86(或重新启用“首选32位”设置),则Asserts将再次开始正常工作。

注意:

  1. 我的.pdb文件似乎很好;断点与任何一种设置完美配合。
  2. 如果我选择禁用我的代码,它仍然无效;它只是带我到一个窗口,上面写着“Source Not Available。”。
  3. 所以我的问题是,如何让Debug Assertions进入64位应用程序中的代码?(或者为什么禁用“Prefer 32-bit”设置会破坏它?)

1 个答案:

答案 0 :(得分:1)

我无法解释为什么会发生这种情况,但是,我尝试了这一点并且 打破了代码,它只是打破了调用堆栈中更深的一行:

Stack trace upon Debug.Assert fail on 64-bit app

如果调出Call Stack窗口,您可以导航到Debug.Assert失败的帧。