0

我在 Visual Studio 2010 调试器中遇到了似乎是错误的问题。我有一段简单的代码,其中bool初始化为的变量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;
}

b 仍然为真

该问题并非始终如一地发生;例如,如果我int在 AND 赋值中将变量替换为它们的实际值,则b正确显示为false. 如果我稍后引用该变量(例如Console.WriteLine(b)),问题也不会出现。

我知道上面的整个代码片段有资格被编译器消除死代码,但我认为在调试模式下编译并在附加调试器的情况下运行时不允许这样的自由?

我正在使用带有 SP1 的 Visual Studio 2010 Professional,目标是 .NET Framework 4.0(尽管我安装了 4.5),在“任何 CPU”的调试模式下构建(使用 64 位平台)。

4

1 回答 1

1

Microsoft 错误 #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 中是否存在这个问题,因为 bug #655793 在那里被标记为已修复。

于 2013-07-12T20:27:44.697 回答