インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このセクションでは、例外とランタイムエラーの場所を特定するためのいくつかのガイドラインを示します。インテル® Fortran のランタイム・エラー・メッセージは、通常、エラーを引き起こしているソース内の正確な位置を示しません。エラーと例外の処理に関するコンパイラー・オプションは次のとおりです。
-check [keyword] オプション (Linux* および macOS*) または /check[:keyword] オプション (Windows*) は、ランタイム時に特定の状態をキャッチするように追加のコードを生成します。
キーワード bounds は、配列の添字および部分文字列を処理する式に対して、コンパイル時およびランタイム時のチェックを実行するコードを生成します。配列添字が配列に設定された次元境界を超えていたり、文字長を超えている場合、エラーが報告されます。
キーワード uninit、初期化されていない変数の動的チェックを行うコードを生成します。変数が書き込まれる前に読み取られる場合、ランタイム・エラー・ルーチンが呼び出されます。
キーワード noformat および nooutput_conversion は、ランタイムエラーの重要度を下げ、プログラムの実行を続けます。
キーワード pointersは、関連付けが解除されたポインターと割付けできない配列を確認するコードを生成します。次の check[:]pointers オプションの例は、さまざまなメッセージを出力します。
割り当てられていない割付け変数の例
real, allocatable:: a(:) ! ! A は割り当てられていません。次のように割り当てます。 ! ! allocate(a(4)) ! ! A は割り当てられていないため、"check pointers" でビルドされた ! アプリケーションで次の文はエラーを出力します。 ! a=17 print *,a end Output 1: forrtl: 重大 (408): fort: (8): 割付け変数 A から変数が 割り当てられていないときにフェッチしようとしました。
関連付けられていないポインターの例
real, pointer:: a(:) allocate(a(5)) a=17 print *,a deallocate(a) ! A が割り当て解除されると、"check pointers" で ! ビルドされたアプリケーションで次の文はエラーを出力します。 a=20 print *,a end Output 2: 17.00000 17.00000 17.00000 17.00000 17.00000 forrtl: 重大 (408): fort: (7): ポインター A をポインターがターゲットと 関連していないときに使用しようとしました。
ゼロ値の Cray* ポインターの例
pointer(p,a) real, target:: b ! ! P にはアドレスが割り当てられていません。 ! 次のようにアドレスを割り当てます。 ! ! p=loc(b) ! ! P にはアドレスが割り当てられていないため、 ! "check pointers" でビルドされたアプリケーションで ! 次の文はエラーを出力します。 ! b=17. print *,a end Output 3: forrtl: severe (408): fort: (9): ポイント先 A を対応する 整数ポインター P の値がゼロのときに 使用しようとしました。
traceback オプションは、ランタイム時に致命的なエラーが発生したとき、ソースファイルのトレースバック情報を表示できるように、オブジェクト・ファイル内に補足情報を生成します。これにより、致命的なランタイムエラーの原因を特定する作業が簡単になります。traceback オプションを指定せずに、.MAP ファイルと、致命的なエラーが発生したときに表示されるスタックの 16 進アドレスをもとに、エラーの原因を特定できる場合もあります。「トレースバック」で説明しているように、致命的なランタイムエラーでは、一部の traceback 関連の情報が提供されます。
fpe オプションは、ランタイム時の浮動小数点算術例外 (IEEE 算術) の処理方法を制御します。fpe[:]3 オプションを指定すると、すべての浮動小数点例外が無効になり、IEEE 例外値が許容され、プログラムが続行されます。これとは対照的に、fpe[:]0 または /fpe:0 を指定すると、例外値 (NaN など) が生成されたり、浮動小数点オーバーフローやゼロ除算が発生したり、または正規化されていない数 (通常はエラーの原因を特定できる) を使用しようとした際に実行を停止します。また、アンダーフローはゼロになります。
warn オプションと nowarn オプションは、コンパイル時の警告メッセージを制御します。コンパイル時の警告メッセージは、ランタイムエラーの原因を判断するのに役立つ場合があります。
Linux* および macOS* では、-fexceptions オプションは、C++ 例外処理テーブルの生成を有効にし、言語が混在したアプリケーションの Fortran ルーチンが、C++ ルーチン間の例外処理に影響されないようにします。
Windows* では、IDE のコンパイル診断オプションは、コンパイル時の診断メッセージを制御します。状況によってはランタイムエラーの原因を判断するのに役立つことがあります。