ランタイム・ライブラリのデフォルトのエラー処理

プログラムの実行中に、エラーまたは例外条件が発生する場合があります。これらは、以下のような原因で発生します。

インテル® Fortran ランタイム・ライブラリ (RTL) は、適切なメッセージを生成し、可能な場合はエラーから回復するための処置を実行します。

Fortran RTLで認識される各エラーに対して、デフォルトの処理が定義されています。明示的にエラー処理方法が指定されない限り、この章で説明されているデフォルトの処理が行なわれます。

Fortran RTL が実際にエラーを処理する方法は、以下の要因によって異なります。

算術例外条件の通知および処理方法は、例外の原因とプログラムのコンパイル方法によって異なります。プログラムが例外を処理できるようにコンパイルされなければ、例外条件の原因となった命令のまで例外は通知されない可能性があります。エラーと例外の処理に関するコンパイラ・オプションは次のとおりです。

ランタイム・メッセージの形式

プログラム実行中 (ランタイム) にエラーが発生すると、Fortran RTL は診断メッセージを発行します。これらのランタイム・メッセージの形式は次のとおりです。

forrtl: severity (nnn): message-text

各アイテムの意味は次のとおりです。

次に、ランタイム・メッセージの重要度について、重要度の高いものから説明します。

重要度レベルが severe のエラーでは、環境変数 FOR_DISABLE_STACK_TRACE が設定されていない限り、スタックトレース情報がデフォルトで表示されます。-traceback コマンド・ライン・オプションが設定されている場合、スタックトレース情報にはシンボリック情報に対して設定されたプログラム・カウンタが含まれています。それ以外の場合、スタックトレース情報には単なる 16 進数のプログラム・カウンタ情報が含まれます。

場合によっては、スタックトレース情報はコンパイルされたコードによってランタイム時に生成され、配列の一時変数の作成に関する詳細を提供します。

FOR_DISABLE_STACK_TRACE が設定されている場合、スタックトレース情報は生成されません。

次のスタックトレース情報に関する例を参照してください。プログラムは、12 行目でエラーを表示します。

program ovf                     
real*4 x(5),y(5)
integer*4 i

x(1) = -1e32
x(2) = 1e38
x(3) = 1e38
x(4) = 1e38
x(5) = -36.0

do i=1,5
  y(i) = 100.0*(x(i))
  print *, 'x = ', x(i), ' x*100.0 = ',y(i)
end do
end

>
ifort -O0 -fpe0 -traceback ovf.f90 -o ovf.exe
> ovf.exe

x =  -1.0000000E+32  x*100.0 =  -1.0000000E+34    (1)
forrtl: error (72): floating overflow
Image        PC         Routine       Line      Source
ovf.exe      08049E4A   MAIN__             14   ovf.f90
ovf.exe      08049F08   Unknown       Unknown   Unknown
ovf.exe      400B3507   Unknown       Unknown   Unknown
ovf.exe      08049C51   Unknown       Unknown   Unknown
Abort

>
setenv FOR_DISABLE_STACK_TRACE true
>
ovf.exe

x =  -1.0000000E+32  x*100.0 =  -1.0000000E+34
forrtl: error (72): floating overflow              (2)
Abort

次の情報は、上記の例の右端に記述された番号に関する情報です。

(1) トレースバック情報が存在する場合のスタックトレース情報です。

(2) FOR_DISABLE_STACK_TRACE 環境変数が設定されているため、スタックトレース情報は生成されません。

プログラム終了時にシェルに返される値

インテル Fortran プログラムは、次のいずれかの方法で終了させることができます。

重要なエラーのための強制コアダンプ

通常は core ファイルを作成しない重要なエラーに対して、強制的にコアダンプを実行することができます。プログラムを実行する前に、decfort_dump_flag 環境変数に True の値 (Y、y、Yes、yEs、True など) を設定して、重要なエラーで core ファイルを作成させます。例えば、次の C シェルコマンドで decfort_dump_flag 環境変数を設定します。

setenv decfort_dump_flag y

core ファイルは、カレント・ディレクトリに書き込まれ、デバッガを使用して調査できます。

重要なエラーに対してコアファイルを作成するように要求しているにも関わらず、ファイルが期待どおりに作成されない場合、プロセス制限でコアファイルの利用可能なサイズが低く設定されている (またはゼロに設定されている) 可能性があります。プロセス制限の設定に関する詳細は、シェルのメインページを参照してください。例えば、C シェルコマンド limit (引数なし) は、現在の設定を通知します。また、limit coredumpsize unlimited はコアファイルの利用可能なサイズを現在のシステムで可能な最大サイズまで許可します。