ランタイム エラー

ランタイム時にエラーが発生した場合は、端末にメッセージが表示されます。

Open PL/I の ON 文を使用して、プログラムで発生する可能性のある状態のハンドラーを開発することができます。ON ERROR 文は、任意のエラーに使用できます。ONLOC 組み込み関数は、ON-unit で使用して、状態が発生したエントリの名前をレポートすることができます。また、ONCODE 組み込み関数は、ランタイム エラーのステータス値をレポートするために使用できます。

注:

ON-unit によりエラーがキャッチされない場合は、Open PL/I は、エラーが発生したソース ファイルおよび行番号を表示します。ただし、これらの機能が動作するようにするには、デフォルト オプションの -unixdebug を使用して、ソース ファイルをコンパイルしておく必要があります。

現在、この機能は、Open PL/I の Sun Solaris 2 および IBM AIX バージョンのみで使用可能です。

ランタイム時に致命的なエラー状態が発生した場合、メッセージには、発生した状態、その状態が発生したプログラム アドレス、その状態が発生したソース ファイル、エントリ、行番号、さらに呼び出しスタック内のそのエラーの上の各プロシージャの行が指定されて表示されます。次に例を示します。

*** Condition ERROR raised 
***Unhandled condition ZERODIVIDE at PC=00010233 
CALCDIV line 26 in /dirl/dir2/calcs.pl1 
SUBR3 line 444 in /dirl/dir2/subprog.pl1 
MYPROG line 871 in /dirl/dir2/mainprog.pl1

この例の説明:

CALCDIV "ZERODIVIDE" 状態が発生したエントリ
SUBR3 (444 行目の) "CALCDIV" を呼び出したエントリ
MYPROG SUBR3 を呼び出したプログラム

-nounixdebug オプションを使用してプログラムをコンパイルした場合は、その状態が発生したプログラム アドレスのみが表示されます。

*** Condition ERROR raised 
*** Unhandled condition ZERODIVIDE at PC=00010233

CICS のエラー処理

次の説明は CICS のエラー処理にのみ該当します。

  • EXEC CICS HANDLE ABEND 文は PL/I の条件処理には影響しません。
  • プログラムで ON ユニットが確立されていない場合、PL/I ランタイムはプログラムの異常終了に関するメッセージを CPLI 一時データ キュー (TDQ) に書き込み、トランザクションを正常に終了します。端末は準備完了状態になり、異常終了は示されません。
  • CICS によって検出された条件 (無効な記憶域の長さなど) は、EXEC CICS HANDLE ABEND が確立されている場合、それを通して異常終了出口を駆動します。PL/I の ON ユニットには制御は移りません。EXEC CICS HANDLE ABEND が確立されていない場合は、CICS の定義に従って処理が実行され、通常はトランザクションが異常終了します。
Notes:
  • プログラムがメッセージを DISPLAY するかストリーム PRINT 出力を SYSPRINT に PUT する場合、それらは CPI TDQ に書き込まれます。ただし、これらのメソッドを使用することはお勧めしません。
  • プログラムによって要求された PLIDUMP は CPLD TDQ に書き込まれます。
  • TDQ は CICS CEBR トランザクションを使用して参照できます。