COBOL2002 ユーザーズガイド
例外は,プログラムの実行状態が異常になった場合に発生します。PCのアーキテクチャでは,命令実行中の異常事態を検知するためにCPU内部で発生させる割り込みのことを特に例外と呼び,CPU外部の要因で引き起こされる割り込みとは区別します。この例外にはCPUが検知するハードウェア例外とソフトウェアによって発行されるソフトウェア例外があります。
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプションのどれも指定しないでコンパイルしたプログラムの実行でハードウェア例外やソフトウェア例外が発生した場合,OSがアプリケーションエラーのダイアログボックスを表示します。代表的なアプリケーションエラーと対処法を「表39-3 代表的なアプリケーションエラー」に示します。
アプリケーションエラーが発生した場合は,次の手順で発生している例外種別および発生個所を調べてください。
発生個所がCALL文を指している場合は,その呼び出し先プログラムも調査の対象としてください。
表39-3 代表的なアプリケーションエラー
例外名称(例外コード) | 意味と対処方法 |
---|---|
アクセス違反 (0xc0000005) |
(原因)アクセスが許されていないメモリに読み書きしようとした。 (対処)このエラーは主に次の要因で発生する。これに該当しないかを確認する。
|
ゼロ除算 (0xc0000094) |
(原因)ゼロで除算しようとした(被除数,除数ともに浮動小数点データでない場合)。 (対処)ゼロによる除算が発生しないようにプログラムを変更する。 |
スタックオーバフロー (0xc00000fd) |
(原因)プログラムが使用するスタックサイズが,プログラムで許されたスタックの上限を超えた。再帰属性プログラム,メソッド,および利用者定義関数で,次の場合に発生しやすくなる。
COBOLプログラムが使用するスタック領域については,「33.3 COBOLプログラムが使用するスタック領域」を参照のこと。 |
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプションのどれかを指定してコンパイルしプログラムを実行した場合に例外が発生すると,COBOLがこれを検知し,実行時メッセージ,および異常終了時要約情報リストで例外種別を出力します。この情報によって,どのような例外が発生したか,および例外がどの実行文で発生しているかを把握できます。
実行時メッセージ,および異常終了時要約情報リストに表示される例外種別とその意味を次に示します。
表39-4 実行時メッセージ,および異常終了時要約情報リストに表示される例外種別
例外種別 | 意味 |
---|---|
RUNTIME ERROR | COBOL実行時エラーが発生した。 |
CBLABN | CBLABNサービスルーチンが呼び出された。 |
EXCEPTION_ACCESS_VIOLATION | 「表39-3 代表的なアプリケーションエラー」の「アクセス違反」を参照 |
EXCEPTION_INT_DIVIDE_BY_ZERO | 「表39-3 代表的なアプリケーションエラー」の「ゼロ除算」を参照 |
EXCEPTION_INT_OVERFLOW | 整数演算の結果,最上位ビットのキャリーアウトが発生した。 |
EXCEPTION_FLT_DENORMAL_OPERAND | 浮動小数点演算で使用している作用対象に異常があり,その値が小さ過ぎるため,標準の浮動小数点値として表せない。 |
EXCEPTION_FLT_DIVIDE_BY_ZERO | 浮動小数点値を浮動小数点値0で割ろうとした。 |
EXCEPTION_FLT_INEXACT_RESULT | 浮動小数点演算の結果を10進小数として正確に表せない。 |
EXCEPTION_FLT_OVERFLOW | 浮動小数点演算の指数の値が,対応する型の上限値を超えている。 |
EXCEPTION_FLT_UNDERFLOW | 浮動小数点演算の指数の値が,対応する型の下限値を超えている。 |
EXCEPTION_FLT_STACK_CHECK | 浮動小数点演算の結果,スタックのオーバフローまたはアンダーフローが発生した。 |
EXCEPTION_FLT_INVALID_OPERATION | この表にないすべての浮動小数点例外を表す。 |
EXCEPTION_PRIV_INSTRUCTION | 現在のマシンモードでは実行できない演算命令を実行しようとした。 |
STATUS_NONCONTINUABLE_EXCEPTION | 実行を続行できない例外の発生後,実行を続行しようとした。 |
異常終了時要約情報リストを出力後,プロセスは終了コード1で終了します。
ただし,環境変数CBLEXCEPT=THROWを指定したときはシステムが返す値が設定されます。
CBLEXCEPT=THROW
この環境変数を指定したときの動作を次に示します。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.