*
PSSR でエラーが発生したステートメント行を調べるには ?特殊サブ・ルーチン *PSSR
は、モニター監視を行うためのユーザー定義のサブ・ルーチンであり、
*PSSR を定義しておけば、開発のときには予測できなかったエラーの発生を監視することができる。
*PSSR は古くから良く知られているので使用している人も多いと思うが、どのステートメント行で
エラーが発生したのかが不明であるので *PSSR の後処理やエラーの場所の特定に時間が
かかってしまったことはないだろうか ?
実は *PSSR としてのエラーが発生した場合でも、プログラム状況データ構造 ( SDS
) を調べれば
エラー行を特定することができるのである。
------------------------------------------------------------------------------ D*( プログラム状況データ構造 ) D INFDSP SDS D PROC_NAM *PROC D ROUTINE *ROUTINE D LINE_NUM 21 28 D EXCP_TYPE 40 42 D EXCP_NUM 43 46 D PGM_LIB 81 90 D EXCP_DATA 91 170 D EXCP_ID 171 174 D PROC_PGM 334 343 D PROC_MOD 344 353 D USER 254 263 ------------------------------------------------------------------------------
上記はプログラム状況データ構造 ( SDS
)の一部であるが、このうちの
D LINE_NUM 21 28
が、エラーが発生したソースのステートメント行である。
D PROC_PGM 334 343
がプログラム名であり、
D PROC_MOD 344 353
がモジュール名である。
D EXCP_TYPE 40 42
は、エラーのメッセージ・タイプである。
例えば、CPF9800
の「CPF
」や MCH6801
の「MCH
」の文字列が保管される。
D EXCP_NUM 43 46
は、メッセージ番号である。
例えば、CPF9800
の「9800
」や MCH6801
の「6801
」の文字列が保管される。
従って、
D MSGID 40 46
として、まとめてメッセージ識別コードとして定義してもよいのであるが、
メッセージ・ファイルを特定するために、あえて分離して定義されているのであろうと推測される。
ここで IBM マニュアルには、詳細には解説されていない項目について補助解説を行う。
D EXCP_ID 171 174
は、エラーを報告したメッセージを識別するための 4 桁のメッセージ参照コードである。
そして、
D EXCP_DATA 91 170
は、このメッセージ項目に渡すメッセージ・データである。
API : QMHRCVPM
の RCVM0300
形式を使えば、上記のメッセージ参照コードによって
オリジナルのメッセージを受信して詳細を調べることができる。
また MSGID
と EXCP_DATA
を使って、元のメッセージを作成することもできる。
このようにして SDS
によって *PSSR
で発生したエラーの詳細を調べることができる。