VC.NET ~ キャッチした例外をインスペクトできない

前置き

再現条件は不明ですが、try-catch文のcatchブロックでブレークをかけたとき、catchした例外を参照できない場合があります。VC.NET 2008です。

本文

void foo()
{
    FileStream^ fs;
    try {
        fs = File::OpenRead("foo.txt");
        fs->Close();
    }
    catch ( FileNotFoundException^ e) {
        Console::WriteLine(e->Message);
    }
    catch ( IOException^ e) {
        Console::WriteLine(e->Message);
    }
    return;
}

下図は、IOExceptionをcatchしたときのデバッガのスクリーンショットです。

catch

このように、eが未定義となっており、しかも型がFileNotFoundExceptionです。1つ前のcatchブロックと混同しているようです。

eの名前を変えても改善しませんでしたが、下記の2パターンなら、どちらでも問題なしでした。

    catch ( FileNotFoundException^) {
    }
    catch ( IOException^ e) {
        Console::WriteLine(e->Message);
    }
    catch ( FileNotFoundException^ e) {
        Console::WriteLine(e->Message);
        return;
    }
    catch ( IOException^ e) {
        Console::WriteLine(e->Message);
    }

ちなみに、デバッガでeが参照できないケースでも、WriteLine(e->Message)でコンソールに出力される文字列は正常でした。

Last modified:2012/02/21 22:48:23
Keyword(s):
References:[.NETアプリ開発]
This page is frozen.