この可能性のあるバグの簡単なクリーンルームの例があります。
static void Main(string[] args)
{
bool MyFalse = false;
if (MyFalse)
{
throw new Exception();
}
try
{
int i = 0;
}
catch (Exception e)
{
Console.Write(e);
}
Console.Read();
}
x64 または AnyCPU でコンパイルされた場合 (VS2012 で 32 ビット優先が false に設定されている場合)、if ブロックにブレークポイントを設定すると、常にヒットします。
VS2012、VS2010、VS2008 で試してみたところ、64 ビットでコンパイルするとすべて if ブロックが起動しましたが、32 ビットでは if ブロックが起動しません。
32 ビット バージョンと 64 ビット バージョンの IL を調べたところ、同じように見えました。
if ブロックが実行されていて、boolean 変数の値に関係なく例外がスローされていたため、これは製品コードで見つかりましたが、単純な例では例外をスローできないように見えますが、製品コードで発生しています。
これは製品コードで発生しているため、デバッガーだけの問題ではありません。
非常に奇妙な動作ですが、実際には if ブロックでコードを実行していないようです。開発者は、それが彼が見た例外であると仮定して銃を飛ばしました。
(すべてのデバッグはデバッグ モードです - プロダクションはリリース中です)
スローがコメントアウトされている場合 - if ブロックに到達していません。