为什么 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" 设置),断言再次开始正常工作。
备注:
- 我的 .pdb 文件似乎没问题;断点与任一设置都能完美工作。
- 如果我select 禁用仅我的代码,它仍然不起作用;它只是带我到 window 上面写着 "Source Not Available."
所以我的问题是,如何让调试断言进入 64 位应用程序中的代码?(或者为什么禁用 "Prefer 32-bit" 设置打破它?)
我无法解释为什么会这样,但是,我试过了,是进入了代码,它只是在调用堆栈的更深处中断了一行:
如果调出调用堆栈 window,您可以导航到 Debug.Assert 失败的框架。
我在两台独立的 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" 设置),断言再次开始正常工作。
备注:
- 我的 .pdb 文件似乎没问题;断点与任一设置都能完美工作。
- 如果我select 禁用仅我的代码,它仍然不起作用;它只是带我到 window 上面写着 "Source Not Available."
所以我的问题是,如何让调试断言进入 64 位应用程序中的代码?(或者为什么禁用 "Prefer 32-bit" 设置打破它?)
我无法解释为什么会这样,但是,我试过了,是进入了代码,它只是在调用堆栈的更深处中断了一行:
如果调出调用堆栈 window,您可以导航到 Debug.Assert 失败的框架。