実行時システムエラーが発生したときに自動的に呼び出す利用者エラー手続きを導入または削除する。
call "CBL_ERROR_PROC" using install-flag install-addrs returning status-code
呼び出しプロトタイプ使用時 ( 説明の読み方) | PIC (32bitシステム) | |
---|---|---|
install-flag | cblt-x1-compx | pic x comp-x. |
install-addrs | cblt-ppointer | usage procedure-pointer. |
status-code | 説明の読み方 参照 |
install-flag | 実行される処理を示す。
|
||||
install-addrs | エラー手続きのアドレス |
なし
.NET 環境ではエラー手続きはアプリケーションで捕捉されなかったランタイム例外に対してのみ実行されます。
本ルーチンを繰り返し呼び出すことによってアプリケーションにいくつかのエラー手続きを導入できる。
エラー手続きが通知されると、それが暗黙に(エラーの処理中の場合など)または明確に(install-flagを1に設定してCBL_ERROR_PROCを呼び出す場合など)削除されるまで、優先順位の同じエラー手続きを導入しようとする。異なる優先順位を指定すると、前に登録した優先順位に上書きされる。
エラー手続きは任意の言語で書くことができる。COBOLで書く場合、install-addrsは入口点のアドレスとする必要がある。次の文を用いてアドレスを得ることができる。
set install-addrs to entry entry-name
COBOLのエラー手続きにはCALL文のような正当なCOBOLが含まれる可能性がある。
エラーが発生すると、導入された手続きが実行される。この実行は、最後に導入された手続きで始まり、最初に導入された手続きで終わる。すべての手続きが処理されると、RTSエラー処理手続きが実行される。
実行時システムエラー処理など他にエラー手続きが必要ない場合は、エラー手続きの終了後に実行されるようにRETURN-CODEをゼロに設定する。
エラー手続きを含むプログラムが取り消された場合は、エラー手続きは削除される。
あるプログラムに導入されたエラー手続きは、別のプログラムが削除できる。
エラー手続きにより、また別のエラー手続きを導入することができます。
エラーの処理中に(このエラー手続きか別のエラー手続き)、任意のエラー手続きを導入すると、それを導入したエラー手続きが戻るときに実行されるが、ZEROリターンコードでは戻らない。これが実行される正確なタイミングは新規のエラー手続きを導入した際の優先順位によって異なる。
RTSエラーがあるエラー手続きで発生した場合は、そのエラー手続きは終了する。RTSは新しいRTSエラーを処理して次のエラー手続きがある場合はそれを実行する。
手続きを導入する場合は、使用する手続きポインタが有効であるか否かを確かめる必要がある。
エラー手続きは、それを導入した実行単位に属している。そのため、そのエラー手続きはそれを導入した実行単位でのみ実行される。
無理に中断しようとすると、エラー手続きを呼び出すことができない。
エラー手続きがあるプログラムの入口点として定義されていてそのプログラム自身にエラーがある場合は、プログラムに局所記憶域節があることを確かめる必要がある。これは、プログラムが再入可能か、エラー手続きの実行時に実行時システムがエラー166(「再帰COBOL呼出しが不正です。」)を引き起こさないかどうかを確認するものである。
エラー手続きに渡されるパラメタ
導入されたエラー手続きが呼び出されると、関連するRTSエラーメッセージを含む文字がパラメタとして渡される。
このパラメタを連絡節にPIC X(325)で定義し、エラー手続きへの入口のUSING指令に含める必要がある。以下にRTSエラーメッセージ文字列の例を示す。
Load Error : file 'prog-name'\n
error code: 173, pc=0, call=-1, seg=0\n
173 Called program file not found in drive/directory\n\0
\nは新しい行の文字列、\0は空(x"00")の終了文字。利用者エラーメッセージはこの形式で記述されている。
エラー手続きの導入例およびエラー発生時に呼び出されるエラー手続きの概略を以下に示す。
working-storage section. 01 install-flag pic x comp-x value 0. 01 install-address usage procedure-pointer. 01 status-code pic 9(4) comp value zeros. local-storage section. linkage section. 01 err-msg pic x(325). procedure division. set install-address to entry "err-proc". call "CBL_ERROR_PROC" using install-flag install-address returning status-code. ... ... * Error procedure: entry "err-proc" using err-msg. * Process err-msg to find out the error number. * Act accordingly. ... * Terminate, but allow other error procedures to be executed. move 1 to return-code exit program stop run.