Fault Analyzerの利用可否を確認
1 |
D PROG,EXIT,EN=IEAVTABX_EXIT,DIAG |
コンソールまたはSDSFからMVSコマンド「D△PROG,EXIT,EN=IEAVTABX_EXIT,DIAG」を実行して、モジュール名IDIXDCAPがMVS出口IEAVTABXとして登録されているかを確認します。下記のように表示されればFault Analyzerはアクティブになっています。
1 2 3 4 |
CSV464I 10.22.24 PROG,EXIT DISPLAY 286 EXIT IEAVTABX_EXIT MODULE STATE EPADDR LOADPT LENGTH JOBNAME PARAM IDIXDCAP A 89F1E8B0 09F1E8B0 00032750 * |
コマンドに対して「CSV463I NO MODULES ARE ASSOCIATED WITH EXIT IEAVTABX_EXIT」のメッセージが返された場合は、Fault Analyzerがインストールされていないか有効になっていない可能性があります。その場合は、システム管理者にFault Analyzerが利用できるシステムなのかを問い合わせて下さい。
デバッグするプログラムのサイドファイルの生成
エラーを起こした命令をソースコードで示すには、モジュール・アセンブル時にサイドファイルを作り、実行時にFault Analyzerが読み込めるようにしておく必要があります。
デバッグするプログラムのADATA(サイドファイル)データセットの割り振り
1 2 3 4 |
//SYSADATA DD DISP=(NEW,CATLG),DSN=&SYSUID..ASMADATA, // UNIT=SYSDA,VOL=SER=xxxxxx,SPACE=(TRK,(40,20)), // DSORG=PO,DSNTYPE=LIBRARY,RECFM=VB,LRECL=32756 // |
レコード形式は可変長、レコード長は8188バイト以上にします。ADATAデータセットは区分データセットが便利です。メンバー登録を繰り返しても圧縮不要なPDSEデータセットとして作成しておきます。
デバッグするプログラムのADATA(サイドファイル)メンバーの登録
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//ASM@JOB1 JOB ,'&SYSUID',NOTIFY=&SYSUID //********************************************************************* // EXPORT SYMLIST=* // SET MBR=PROG1 //********************************************************************* //ASMACL EXEC ASMACL,COND.L=(8,LE,C), // PARM.C='ASA,ADATA,US(WARN(11))',PARM.L='MAP,LET,LIST' //C.SYSADATA DD DISP=SHR,DSN=&SYSUID..ASMADATA(&MBR) //C.SYSIN DD *,SYMBOLS=JCLONLY : : アセンブラーのソースコード : : YREGS , S/370 GPR EQUATES END , // // |
ADATA(サイドファイル)データは、アセンブル時のオプションADATAによって生成されます。PARMパラメーターでオプションADATAとデータ・メンバーの格納先データセットを定義したSYSADATA DDステートメントを追加します。
プログラムの実行JCLにFault Analyzer関連DDステートメントを追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//STEP1 EXEC PGM=PROG1 //STEPLIB DD DISP=SHR,DSN=&SYSUID..LOAD //SYSPRINT DD SYSOUT=* //INFILE1 DD DISP=SHR,DSN=&SYSUID..DATA1 //* //IDIADATA DD DISP=SHR,DSN=&SYSUID..ASMADATA //IDIHIST DD DUMMY //IDIOPTS DD DATA,DLM='++' /*-------------------------------------------------------------------*/ /* IBM Fault Analyzer for z/OS */ /* for Assembler program debugging under BATCH/JOB. */ /*-------------------------------------------------------------------*/ INCLUDE(CLASS(*)) DETAIL(MEDIUM,EXTRASOURCE(5)) ++ // // |
Fault Analyzerを利用してリアルタイム分析を行うためのJCL例です。プログラムを実行するJCLにIDIで始まるDD名のDDステートメントをいくつか追加します。
IDIADATAは、HLASMがADATAオプションによって生成したサイドファイルを格納したライブラリーの定義です。エラーを起こした命令をソースコードで示すには、モジュール・アセンブル時にサイドファイルを作り、実行時にFault Analyzerが読み込めるようにしておく必要があります。モジュール名もしくはCSECT名に対応するメンバーが読み込まれます。サイドファイルはオプションなので、未定義でもリアルタイム分析は行われます。ただし、ダンプ解析に慣れていないアセンブラー・プログラマーが自ら解析する代わりにFault Analyzerを使うのであれば、サイドファイルを用意しておくことを奨めます。
IDIHIST DD DUMMYは、ヒストリー・ファイルを使わないことを示します。ヒストリー・ファイルは、区分データセットに格納される分析データ・メンバーです。ABEND時のリアルタイム分析の他に、後でISPF上のFault Analyzerによってパネルによる非リアルタイム分析を行う際に利用されます。デフォルトのヒストリー・ファイルは共用もしくは業務用に運用されますから、学習用プログラムのABENDデータを格納するのは適切ではありません。そこで、IDIHIST DD DUMMYを定義して、ヒストリー・ファイルに格納しないことを明示します。
IDIOPTSは追加または変更するFault Analyzerオプションをそれぞれ定義するものです。INCLUDE(CLASS(*))は、バッチジョブであれば全てのクラスをリアルタイム分析の対象にすることを示します。DETAIL(MEDIUM,EXTRASOURCE(5))は省略値でもあって、中程度の詳細レベルで分析を行い、エラー箇所に関連するソースコードを前後5行分出力することを示します。IDIOPTS定義が無くてもFault Analyzerのリアルタイム分析が行われれば、IDIOPTSの定義は不要です。リアルタイム分析が行われると、ジョブログには下記に示すようなメッセージが出力されてIDIREPRTに分析結果のレポートが出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
00.04.09 JOB02944 $HASP373 Zxxxxx@A STARTED - INIT 1 - CLASS A - SYS S0W1 00.04.11 JOB02944 +IDI0001I Fault Analyzer V14R1M21 (UI94052 2023/10/17) invoked by IDIXDCAP using VENDOR.PARMLIB(IDICNF00) 00.04.13 JOB02944 +IDI0053I Fault history file entry suppressed due to: DUMMY history file specification 00.04.13 JOB02944 +IDI0002I Module GO, program MAINENTR, compiler listing file 221 221 Zxxxxx.ASMADATA(GO) statement # 57: Abend S0C7-X'0' (Data Exception) 00.04.14 JOB02944 IEA995I SYMPTOM DUMP OUTPUT 222 222 SYSTEM COMPLETION CODE=0C7 REASON CODE=00000000 222 TIME=00.04.10 SEQ=43476 CPU=0000 ASID=0031 222 PSW AT TIME OF ERROR 078D0000 80007E30 ILC 4 INTC 07 222 ACTIVE MODULE ADDRESS=00000000_00007D78 OFFSET=000000B8 222 NAME=GO 222 DATA AT PSW 00007E2A - C1224F10 C110D209 C15FC125 222 GR 0: 00003039 1: FFFFFF85 222 2: 22222222 3: 33333333 222 4: 44444444 5: 55555555 222 6: 66666666 7: 77777777 222 8: 88888888 9: 99999999 222 A: AAAAAAAA B: BBBBBBBB 222 C: 80007D78 D: 80007D94 222 E: 00007000 F: 00000000 222 END OF SYMPTOM DUMP 00.04.14 JOB02944 IEF450I Zxxxxx@A G ASMACLG - ABEND=S0C7 U0000 REASON=00000000 |
Fault Analyzerによるリアルタイム分析を行うデバッグ用サンプルJCL
下記にアセンブル&サイドファイル生成~実行形式モジュールのバインド~プログラムの実行迄の一連を行うJCL例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//ASM@JOB1 JOB ,'&SYSUID',TIME=(,59),LINES=(200,CANCEL),NOTIFY=&SYSUID //********************************************************************* // EXPORT SYMLIST=* // SET MBR=GO //********************************************************************* //ASMACLG EXEC ASMACLG,COND.L=(8,LE,C),COND.G=(8,LE,C), // PARM.C='ASA,ADATA,TEST,US(WARN(11))',PARM.L='MAP,LET,LIST,TEST' //C.SYSLIB DD // DD DISP=SHR,DSN=SYS1.MODGEN //C.SYSADATA DD DISP=SHR,DSN=&SYSUID..ASMADATA(&MBR) //G.IDIADATA DD DISP=SHR,DSN=&SYSUID..ASMADATA //G.IDIHIST DD DUMMY //C.SYSIN DD *,SYMBOLS=JCLONLY : : アセンブラーのソースコード : : YREGS , S/370 GPR EQUATES END , //********************************************************************* //G.IDIOPTS DD * INCLUDE(CLASS(*)) DETAIL(MEDIUM,EXTRASOURCE(10)) // // |
学習用プログラムのABENDをFault Analyzerを利用してリアルタイム分析します。JCL内にソースコードを記述して、HLASM標準提供のASMACLGプロシージャーによってアセンブル~バインド~実行迄を行います。
Fault Analyzerの詳細は、マニュアル「IBM Fault Analyzer for z/OSユーザーズ・ガイドおよびリファレンス」(SC43-4314)を参照して下さい。