インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

デバッグと最適化

ここでは、デバッグと最適化を制御するさまざまなコマンドライン・オプションの関係について説明します。

-g オプション (Linux* および macOS*) または /debug:full オプション (Windows*) を使用してデバッグを有効にすると、最適化が無効になります。この場合、コマンドラインで、最適化のコンパイラー・オプションを明示的に指定することで、最適化を有効にできます。

次の表は、一般的なデバッグオプションと最適化オプションをまとめたものです。

-O0 (Linux* および macOS*)

/Od (Windows*)

すべての最適化をオフにするため、最適化が行われる前にプログラムをデバッグすることができます。デバッグを行う場合のデフォルトの動作です。

Linux* および macOS* では、-O0 オプションまたは -g オプションを指定すると、-fno-omit-frame-pointer が設定されます。

詳細は、次のトピックを参照してください。

  • -O0 (Linux* および macOS*) コンパイラー・オプション
  • /Od (Windows*) コンパイラー・オプション

O1O2O3 (Linux* および macOS*)

O (Windows*)

コードの最適化レベルを指定します。これらのオプションを使用する場合、デバッグを行うには -debug extended を使用することを推奨します。

詳細は、次のトピックを参照してください。

  • -O1-O2-O3 (Linux* および macOS*) コンパイラー・オプション

  • /O (Windows*) コンパイラー・オプション

-g (Linux* および macOS*)

/debug:full (Windows*)

ソースレベルのデバッガーで使用するため、オブジェクト・コードの中にシンボリック・デバッグ情報と行番号を生成します。O2 をオフにして -O0 (Linux* および macOS*) または /Od(Windows*) をデフォルトにします。ただし、コマンドラインで O1O2、または O3 を明示的に指定する場合は除きます。

詳細は、次のトピックを参照してください。

  • -g (Linux* および macOS*)
  • /debug:full (Windows*) コンパイラー・オプション

-debug extended (Linux* および macOS*)

拡張デバッグの設定を指定します。

詳細は、次のトピックを参照してください。

  • -debug extended (Linux* および macOS*)

-fp (Linux* および macOS*)

/Oy (Windows*)

(IA-32 アーキテクチャーのみ)

最適化で ebp レジスターの使用を無効にし、ebp レジスターをフレームポインターとして使用するように設定します。

詳細は、次のコマンドライン・オプションのトピックを参照してください。

  • -fp (Linux* および macOS*)
  • /Oy (Windows*)

traceback

コンパイラーがオブジェクト・ファイルに追加情報を生成するので、シンボリック・スタック・トレースバックが可能になります。

詳細は、次のトピックを参照してください。

  • traceback コンパイラー・オプション

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

コマンドラインで、オブジェクト・ファイルにシンボリック・デバッグ情報を生成する -g (Linux* および macOS*) または /debug:full (Windows*) とともに、最適化オプション O1O2、または O3 を指定すると、シンボリック・デバッグ対応のコードを生成します。

-g オプション (Linux* および macOS*) または /debug:full オプション (Windows*) とともに O1O2、または O3 オプションを指定すると、最適化の影響でデバッグ情報の一部が不正確になることがあります。

Linux* および macOS* でこの問題を回避するには、-debug extended オプションも指定します。

最適化とデバッグは明示的に選択するようにしてください。

最適化レベルを指定しない場合、-g オプションまたは /debug:full オプションは、速度を低下させる -O0 または /Od を設定するため、プログラムの実行速度を低下させます。ただし、O2-g (Linux* および macOS*) または /debug:full (Windows*) の両方を指定すると、速度はそれほど低下しません。

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

オプション

結果

-g (Linux* および macOS*)

/debug:full (Windows*)

デバッグ情報が生成され、-O0 (Linux* および macOS*) または /Od (Windows*) が有効になります (最適化が無効になります)。

Linux* および macOS* システムでは、IA-32 アーキテクチャーを対象にコンパイルする場合は、-fp が有効になります。

-g-O1 (Linux* および macOS*)

/debug:full /O1 (Windows*)

デバッグ情報が生成され、O1 による最適化が有効になります。

-g-O2 (Linux* および macOS*)

/debug:full /O2 (Windows*)

デバッグ情報が生成され、O2 による最適化が有効になります。

-g-O2 (Linux* および macOS*)

/debug:full /O2 /Oy- (Windows*)

デバッグ情報が生成され、O2 による最適化が有効になります。IA-32 アーキテクチャー・ベースの Windows* システムでは、/Oy が無効になります。

-g -O3 -fp (Linux* および macOS*)

/debug:full /O3 (Windows*)

デバッグ情報が生成され、O3 による最適化が有効になります。Linux* システムでは、IA-32 アーキテクチャーを対象にコンパイルする場合は、-fp が有効になります。

最適化されたプログラムで debug extended オプションを使用しても、最適化処理中にコードが移動または削除されるため、すべての変数を確認したり、すべての行にブレークポイントを設定することはできません。