最適化の際にだけ問題が表面化するときは、初期化されていない変数を使用するなどの、 最適化によって発生する論理エラーまたはコンパイル・エラーを示す 場合がよくあります。最適化バージョンでだけ発生するプログラム・エラーが検出された場合は、 通常、障害モジュールを検出する、以下のようなバイナリー検索手法を使用することにより、 エラーの原因を見つけることができます。
最適化コードをデバッグするときは、デバッガー・ビューの情報によって、実際には存在しない論理問題の可能性が示される場合があります。 以下の点を考慮してください。
変数の現行値を示す場合は、 「変数」ビューを信用しないでください。 数値、文字値、およびポインターは、プロセッサー・レジスターに保持される場合があります。 最適化プログラムでは、これらの値およびポインターは必ずしもメモリーに書き出されるとは限りません。場合によっては必要でないために廃棄される場合もあります。
最適化関数内では、 静的変数または外部変数の値が必ずメモリーに書き出されるとは限りません。 しかし、静的変数は、関数のエントリー/エグジット・ポイントでは常に正常です。
「レジスター」ビューと「メモリー」ビューは正常です。 「変数」ビューなどの、実際の変数を示すモニターとは異なり、 「レジスター」ビューと「メモリー」ビューは、 常に、実行が最後に停止した時点の最新値です。
「逆アセンブル」ビューまたは「混合」ビューを使用してプログラムのマシン・コードを調べると、例えば、ソース・コードの変数に対する割り当てで、逆アセンブル・コードが作成されていないことを発見する場合があります。これは、割り当て後に、変数の値が使用されていないことを示している可能性があります。
最適化が多いと、生成済みコードの再配列が行われます。 生成済みコードが再配列されると、 ソース・ステートメントの順序は維持されません。