最適化とデバッグ

ここでは、コンパイルのデバッグやコンパイル・エラーの表示およびチェックに使用できるコマンドライン・オプションについて説明します。最適化のときにデバッグ情報を得ることができるオプションは次のとおりです:

オプション 説明
-O0 最適化を無効にします。-fp オプションを有効にします。
-g ソースレベルでのデバッガで使用するため、オブジェクト・コードの中にシンボリック・デバッグ情報と行番号を生成します。コマンドラインで -g とともに -O1-O2、または -O3 が明示的に指定されていなければ、-O2 をオフにして -O0 をデフォルトにします。
-fp
IA-32 のみ
EBP レジスタを汎用レジスタとして使用できないようにします。
オプション -fp に対する影響
-O1-O2、または -O3 -fp を無効にします。
-O0 -fp を有効にします。

最適化とデバッグの組み合わせ

-O0 オプションはすべての最適化をオフにするため、最適化が行われる前にプログラムをデバッグすることができます。デバッグ情報を得るには、-g オプションを使用します。コマンドラインで、オブジェクト・ファイルにシンボリック・デバッグ情報を生成する -g オプションとともに、最適化オプション -O1-O2、または -O3 が指定されると、コンパイラはシンボリック・デバッグ対応のコードを生成します。

-g オプションとともに -O1-O2、または -O3 オプションを指定すると、返されるデバッグ情報の一部が最適化の副作用として不正確になることがあります。

最適化とデバッグ・オプションは明示的に選択するようにしてください:

-O1-O2、または -O3 オプションを指定しないで -g オプションを指定すると、プログラムの速度は遅くなります。この場合、-g オプションはプログラムの速度を遅くする -O0 オプションをオンにするためです。-O2-g オプションが指定された場合、コードは -g が指定されていない場合とほぼ同じ速度で実行されます。

次の表は、-g オプションと最適化オプションを組み合わせて使用した場合の効果を説明したものです。

オプション 結果
-g デバッグ情報が生成され、-O0 (最適化無効) が有効になります。IA-32 を対象にコンパイルする場合は、-fp が有効になります。
-g -O1 デバッグ情報が生成され、-O1 による最適化が有効になります。
-g -O2 デバッグ情報が生成され、-O2 による最適化が有効になります。
-g -O3 -fp デバッグ情報が生成され、-O3 による最適化が有効になります。IA-32 を対象にコンパイルする場合は、-fp が有効になります。

デバッグとアセンブル

アセンブリ・ファイルはデバッグ情報なしで生成されますが、オブジェクト・ファイルを生成すると、そのオブジェクト・ファイルにはデバッグ情報が含まれます。このため、オブジェクト・ファイルをリンクしてから GDB デバッガを使用すると、完全なシンボリック表現が得られます。