ここでは、コンパイルのデバッグやコンパイル・エラーの表示およびチェックに使用できるコマンドライン・オプションについて説明します。
最適化のときにデバッグ情報を得ることができるオプションは次のとおりです:
-O0 |
最適化を無効にします。-fp オプションを有効にします。 |
-g |
ソースレベルでのデバッガで使用するため、オブジェクト・コードの中にシンボリック・デバッグ情報と行番号を生成します。コマンドラインで -g とともに -O2 (または -O1、または -O3) が明示的に指定されていなければ、デフォルトの -O2 オプションをオフにして -O0 をデフォルトにします。 |
-debug キーワード |
デバッグを向上させる設定を指定します。このオプションを使用するには、-g も指定する必要があります。キーワード には、ローカルスカラ変数を検出するのに役立つデバッグ情報を生成する variable_locations のみが選択できます。 |
-fp |
最適化で ebp レジスタの使用を無効にします。すべての関数について ebp ベースのスタックフレームを使用するように指示します。 |
-g オプションを使用して、ソースレベルでのデバッガが使用するオブジェクト・コード内に、シンボリック・デバッグ情報と行番号を提供するコードを生成するよう、コンパイラに指示します。次に例を示します。
ifort -g prog1.f
コマンドラインで -g とともに -O2 (または -O1、または -O3) が明示的に指定されていなければ、デフォルトの -O2 オプションをオフにして -O0 をデフォルトにします。
ほとんどのデバッガは、スタック・バックトレースを生成するためのスタック・フレーム・ポインタとして ebp レジスタを使用します。-fp オプションは、最適化に ebp レジスタを使用できないようにして、すべての関数のスタック・フレーム・ポインタとして ebp レジスタを使用するコードを生成するようにコンパイラに指示します。これにより、デバッガは -O1、-O2、または -O3 の最適化をオフにすることなく、スタック・バックフレームをそのまま生成することができます。
このオプションを使用すると、利用可能な汎用レジスタが 1 つ減るため、生成するコードの効率が少し低下する場合があります。
-fp のまとめ
デフォルト |
オフ |
-O1、-O2、または -O3 |
-fp を無効にします。 |
-O0 |
-fp を有効にします。 |
-traceback オプションもまた、コンパイラにスタック・フレーム・ポインタとして ebp を強制的に使用するよう指示します。さらに、-traceback オプションを指定すると、コンパイラがオブジェクト・ファイルに追加情報を生成するので、ランタイム・エラーが発生した場合にシンボリック・スタック・トレースバックを生成することができます。
-O0 オプションはすべての最適化をオフにするため、最適化が行われる前にプログラムをデバッグすることができます。デバッグ情報を得るには、-g オプションを使用します。
コマンドラインで、オブジェクト・ファイルにシンボリック・デバッグ情報を生成する -g オプションとともに、最適化オプション -O1、-O2、または -O3 が指定されると、コンパイラはシンボリック・デバッグ対応のコードを生成します。
-g オプションとともに -O1、-O2、または -O3 オプションを指定すると、返されるデバッグ情報の一部が最適化の副作用として不正確になることがあります。
最適化とデバッグ・オプションは明示的に選択するようにしてください:
最適化の影響を受けないようにプログラムをデバッグする必要がある場合は、すべての最適化をオフにする -O0 オプションを使用してください。
最適化を有効にしてプログラムをデバッグする必要がある場合は、コマンドラインで -g オプションとともに -O1、-O2、または -O3 オプションを指定することができます。
注
最適化レベル (-On) を指定しないで -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 デバッガを使用すると、完全なシンボリック表現が得られます。