21.8.2 例外検出での注意事項
(1) 共通の注意事項
-
Uレベルエラー(KCCCnnnnR-U)が発生した場合,発生したUレベルエラーに対しては,共通例外処理を実行できません。Uレベルエラーは,常に実行時エラーとなります。
(2) プログラム間連絡での注意事項
-
CALL文で実行可能ファイルを呼び出す場合,次に示す例外に対してだけ共通例外処理を実行できます。なお,実行可能ファイル内で引き起こされた例外は,呼び出し元プログラムに伝播できません。
表21‒9 実行可能ファイルの呼び出しで検出される例外と例外名 検出される例外
例外名
CALL文で指定した実行可能ファイルが見つからない。
EC-PROGRAM-NOT-FOUND
実行可能ファイルを実行中にメモリが不足した。
EC-PROGRAM-RESOURCES
実行可能ファイルの処理中にエラーが発生した。
EC-PROGRAM-IMP
-
COBOL85※で作成したプログラムをCALL文に指定して呼び出す場合は,次に示す例外に対してだけ共通例外処理を実行できます。
- 注※
-
COBOL85でコンパイルしたプログラムが動作可能なシステム
表21‒10 COBOL85で作成したプログラムの呼び出しで検出される共通例外と例外名 共通例外処理で検出される例外
例外名
CALL文で指定したプログラム名が,呼び出しできないプログラムである。
EC-PROGRAM-NOT-FOUND
動的なリンクの処理中にメモリが不足した。
EC-PROGRAM-RESOURCES
共用ライブラリのロード中にエラーが発生した。
EC-PROGRAM-IMP
-
CALL文に,ENTRY文で定義した呼び出し先プログラムの入口点を指定し,かつその入口点に指定したプログラムがマルチスレッド対応COBOLプログラムの場合は,次に示す共通例外処理を実行できません。
表21‒11 CALL文にENTRY文で定義した入口点を指定した場合に共通例外処理ができない例外 共通例外処理ができない例外
例外名
マルチスレッド機能の処理中にメモリが不足した。
EC-PROGRAM-RESOURCES
-
再帰属性でないプログラムを再帰的に呼び出した場合,例外名EC-PROGRAM-RECURSIVE-CALLが引き起こされるかどうかは,呼び出し先プロブラムの入口点時点で該当する例外の有効状態に従います。
(3) 入出力での注意事項
-
共通例外処理では,プログラムが順次処理していく過程で例外を検出するため,発生する例外は,常に1種類となります。ただし,次に示す場合は,処理の順序に関係なく,致命的な例外が優先して検出されます。
-
ページあふれ条件での例外が発生したあと,LINAGE句に指定したデータ名の値不正によって例外が検出された場合。
-
-
入出力文を実行する際に,SELECT句のファイル名に割り当てられた物理ファイル,または物理ファイルに対するレコードが,ほかの実行単位によって排他モードで使用されている場合,入出力文の実行は不成功となり,入出力状態が9xを示しますが,例外名EC-I-O-IMPは検出されません。
(4) コンパイラオプションとの関連性
共通例外処理とコンパイラオプションとの関連性について,次に示します。
-
デバッグオプションを指定した場合に実行されるエラーチェックと,共通例外処理での例外の検出は,同時に実行できません。デバッグオプションを指定した場合に無効となる例外名を,次に示します。
表21‒12 デバッグオプション指定時に無効となる例外名 デバッグオプション
デバッグオプション指定時に無効となる例外名
-DebugCompati
-
EC-PROGRAM-ARG-MISMATCH
-
EC-BOUND-REF-MOD
-
EC-BOUND-SUBSCRIPT
-DebugRange
-
EC-BOUND-REF-MOD
-
EC-BOUND-SUBSCRIPT
-
-
デバッグオプションによるエラーチェックは,共通例外処理の例外の検出よりも優先されます。そのため,デバッグオプションの指定の有無によって,実行結果が異なることがあります。
-
EC-ALLや複数の例外名を指定した場合,-DebugDataオプションの指定の有無によって,検出される例外が変わることがあります。