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