我遇到了Visual Studio 2010调试器中的错误。我有一段简单的代码,其中初始化为bool
的{{1}}变量为AND-assigned,其表达式的计算结果为true
。它的最终结果显然应该是false
,但调试器有时会将其显示为false
。
true
问题不会持续发生;例如,如果我将static void Main(string[] args)
{
int x = 20;
int y = 0;
int z = 8;
bool b = true;
b &= x == y || x >= z && y >= z;
}
变量替换为AND分配中的实际值,int
会正确显示为b
。如果我稍后引用变量(例如false
)。
据我所知,上面的整个代码片段都符合编译器消除死代码的条件,但是我认为在调试模式下编译并运行调试器时不允许这样的自由吗?
我正在使用带有SP1的Visual Studio 2010 Professional,目标是.NET Framework 4.0(虽然我安装了4.5),在“任何CPU”(使用64位平台)的调试模式下构建。
答案 0 :(得分:1)
Microsoft Bug#655793:使用Visual Studio 2010调试器调试x64代码时错误报告变量值
似乎相关:http://connect.microsoft.com/VisualStudio/feedback/details/655793/
错误的解决方法似乎也适用于此问题:
bool b = true;
b &= x == y || x >= z && y >= z;
// ...
bool c = b; // adding intermediate initialization of c fixes b as well.
一个问题是VS 2012中是否存在此问题,因为错误#655793标记为已修复。