0

Visual Studio 2010 デバッガーのバグと思われるものに遭遇しました。boolに初期化された変数が に評価される式でtrueAND割り当てされている単純なコードがあります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.  

1 つの疑問は、バグ #655793 が修正済みとマークされているため、この問題が VS 2012 に存在するかどうかです。

于 2013-07-12T20:27:44.697 に答える