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