プログラム・チェックが実行された場所の確認

トランザクションがコード ASRA または ASRD で異常終了し、プログラム チェックのシステム ダンプが生成された場合、最初に行う必要があるのは、プログラム チェックが発生した場所を見つけることです。 CICS®これをあなたのために確立しようとします。

このタスクについて

エラーのプログラムの記録およびプログラム・ロード・モジュール内のプログラム・チェックのオフセットは、以下の場所に含まれています。
  • メッセージDFHAP0001またはDFHSR0001 、これは異常終了に先行する
    例えば、次のようになります。
    DFHAP0001異常終了(コード0C4/AKEA) がモジュールのオフセット X'FFFFFFFF' で発生しましたCICS-モジュール。
    DFHSR0001異常終了(コード0C7/AKEA) がプログラム内のオフセット X'FFFFFFFF' で発生しましたユーザープログラム。
    DFHSR0001異常終了(コード0C1/AKEA) がプログラム内のオフセット X'FFFFFFFF' で発生しました-のへだ-
  • トランザクション異常終了制御ブロック(TACB)は、異常終了を説明するために作成されます。
  • 例外トレース ポイント ID AP 0781 (ASRA 異常終了の場合)、または AP 0783 (ASRD 異常終了の場合)
CICSプログラム ステータス ワード (PSW) を調べて、異常終了の原因となった命令と、障害発生時に実行されていたプログラム (またはモジュール) を特定しようとします。 もしCICSPSWがどのプログラム(またはモジュール)に含まれているか判断できない場合は、CICSメッセージ テキストでは次の情報を使用します。
  • 実際のオフセットの代わりにオフセットX'FFFFFFFF'
  • 知られている「最後の」プログラム(またはモジュール)の名前CICSこれがエラーの原因であったかどうかは不明である

見るトランザクションダンプの解釈

手順

注記: この手順で示す画面例は、 CICS ダンプが CICS TS 6. 3 環境から出力されることを前提としている。

  1. プログラム・ロード・モジュール内のプログラム・チェックのオフセットを見つけます。
    このオフセットは、プログラム内のプログラム・チェックの発生地点を示します。 オフセットは PSW の次の順次命令アドレスから導出されるため、障害が起こった命令のの命令を示す可能性があることを覚えておいてください。
    • オフセットがX'FFFFFFFF' 、へどのような種類のプログラムチェックが発生したか
    • オフセットがX'FFFFFFFF' 、CICSプログラムチェックの場所を特定できませんでした。 このような状況では、PSW を使用して次の連続命令アドレスを取得する必要があります。 プログラム チェック用の PSW とレジスタを見つけます。 ステップを続行2
  2. PSW を見つけます。
    PSW は以下の場所で見つかります。
    • 異常終了の TACB
    • フォーマット済みトランザクション・ダンプの先頭
    • 例外トレース・ポイント ID AP 0781 または AP 0783 によってトレースされるカーネル・エラー・データ・ブロック内
    1. オプションを入力0 IPCS 基本オプション メニューから IPCS デフォルト値パネルを表示します。
      IPCS PRIMARY OPTION MENU - z/OS 
      OPTION  ===> 0                                            
                                                               
         0  DEFAULTS    - Specify default dump and options     
         1  BROWSE      - Browse dump data set                 
         2  ANALYSIS    - Analyze dump contents                
         3  UTILITY     - Perform utility functions            
         4  INVENTORY   - Inventory of problem data            
         5  SUBMIT      - Submit problem analysis job to batch 
         6  COMMAND     - Enter subcommand, CLIST or REXX exec 
    2. 入力DSNAME('xxxxx.xxxxx.xxxx')の右にソースどこxxxxx.xxxxx.xxxxダンプ データセット名です。 次に、入力そしてF3 IPCS 基本オプション メニューに戻ります。

      例:

      Source  ==> DSNAME('ONTOP.CICSPD.LABDUMPS.BEAR0C1.DUMP760')
    3. オプションを入力6 IPCS 基本オプション メニューから IPCS サブコマンド入力パネルを表示します。
      IPCS PRIMARY OPTION MENU - z/OS 
      OPTION  ===> 6                                            
                                                               
         0  DEFAULTS    - Specify default dump and options     
         1  BROWSE      - Browse dump data set                 
         2  ANALYSIS    - Analyze dump contents                
         3  UTILITY     - Perform utility functions            
         4  INVENTORY   - Inventory of problem data            
         5  SUBMIT      - Submit problem analysis job to batch 
         6  COMMAND     - Enter subcommand, CLIST or REXX exec 
    4. IPCSコマンド verbx dfhpdnnn 'ke'nnnは CICS ダンプのリリース識別子(例えば、 CICS TS 6. 3の場合は 760 )。

      例:

      ------------------------- IPCS Subcommand Entry -----------------------------
      Enter a free-form IPCS subcommand or a CLIST or REXX exec invocation below:  
                                                                                   
      ===> verbx dfhpd760 'ke'

      このコマンドはダンプをフォーマットし、カーネル ドメイン KE_TASK サマリーに表示します。

      次の表は、CICS参考までに、TS バージョンと対応する製品レベルを示します。

      表 1. CICSTS バージョンと対応する製品レベル
      CICSTSバージョン レベル
      CICSTS6.2 750
      CICS TS 6.1 740
      CICS TS 5.6 730
      CICS TS 5.5 720
      CICS TS 5.4 710
      CICS TS 5.3 700
    5. 入力f *YES*プログラムチェックを行った実行中のタスクにアクセスします。
      複数ある可能性があります。 以下の例では、ERROR (KE_NUM 0157) の下に *YES* があるタスクが 1 つあります。
      
      ===KE: Kernel Domain KE_TASK Summary
      KE_NUM  KE_TASK   STATUS       TCA_ADDR  TRAN_#  TRANSID  DS_TASK   KE_KTCB   ERROR   TCB      CURRENT_PSW
      0001    22FEA000  KTCB Step    00000000                   00000000  2302E038         AFF208  078D1000_A2E702A4
      0002    22FEA630  KTCB QR      00000000                   23017F00  230311B8         AE68F8  070C4000_818481CC
      0003    22FE9000  KTCB RO      00000000                   23026E00  23030138         AE6B28  078D1000_A2E1857E
      0157    24b15100  ***Running** 232D3100  00383   ABCD     5B6A6C80  230311B8  *YES*  AE68F8  070C4000_818481CC
      
    6. エラーのあるタスクの KE_NUM、TCA_ADDR、および TRANSID をメモします。
    7. 入力f tableKE ドメイン エラー テーブルの概要を確認します。
      これは、開始以来の、その地域での最後の 50 件の異常終了を含む要約です。 通常、実行中のタスクの概要 (テーブルの最後のエントリ) を確認するときは、最新のエラーに注目します。 タスクに複数のプログラム チェックがある場合は、他のプログラム チェックは最初のプログラム チェックの結果である可能性が高いため、最初のプログラム チェックに重点を置きます。
      
      ===KE: Kernel Domain Error Table Summary
      ERR_NUM    ERR_TIME   KE_NUM   ERROR TYPE             ERR_CODE   MODULE   OFFSET
      =======    ========   ======   ==========             ========   ======   ======
      0000005B   14:19:59    0158    TRAN_ABEND_PERCOLATE   ---/AJ04   DFHPCP   00000696
      0000005C   14:19:59    0158    TRAN_ABEND_PERCOLATE   ---/AJ04   UNKNOWN  UNKNOWN
      0000005D   14:19:59    0158    TRAN_ABEND_PERCOLATE   ---/AJ04   DFHEPC   00000226
      0000005E   14:19:59    0157    PROGRAM_CHECK          0C4/AKEA   DFHYI760 000002F2
      
    8. 入力ip st sysダンプが作成されたローカルの日時を確認するには、コマンド ラインで を使用します。
    9. ダンプが作成された時刻と一致する ERR_TIME と、カーネル ドメイン KE_TASK サマリーで見つかった KE_NUM と一致する KE_NUM を持つプログラム チェックに関連付けられた ERR_NUM をメモします。 同じ ERR_TIME と KE_NUM に対して複数のプログラム チェックがある場合は、最初のプログラム チェックに焦点を当てます。 他のプログラム チェックは、おそらく最初のプログラム チェックの結果です。
    10. 入力f 'Number: xxxxxxxx'ここで、xxxxxxxx は、重点的にチェックすることにしたプログラム チェックの ERR_NUM です。
      この操作により、指定したエラー番号の KE ドメイン エラー テーブルのエントリが表示されます。
      指定したエラー番号の KE ドメイン エラー テーブルのエントリを表示する操作を示すスクリーン ショット。
    11. オフセットのアドレスを比較するX'4C' KERNEL ERROR DATA のオフセット X'134'。

      オフセットのアドレスX'4C'の4番目の単語ですCICSPSWであり、オフセットX'134'のアドレスは、z/OS®PSW。 住所が異なる場合は、z/OSPSW とレジスタ。 それ以外の場合は、CICSPSW とレジスタ。

      のCICSPSW はオフセット x'40' から始まり、長さは 4 ワードです。 のCICSレジスタ 0 から 15 はオフセット X'68' から始まり、各レジスタの長さは 2 ワードです。

      のz/OSPSW はオフセット x'128' から始まり、長さは 4 ワードです。 のz/OSレジスタ 0 から 15 はオフセット x'150' から始まり、各レジスタの長さは 2 ワードです。

    12. 使用F8スクロールダウンしてフォーマットされたCICSPSW とレジスタ。

      IPCSCICSVERBXは、z/OSPSWとレジスターz/OSPSWはCICSPSW。 PSWが同じであれば、CICSVERBX は情報を複製しません。

      
      CICS Registers and PSW
        PSW:  079D1000 80000000 00000000 27ED52F2    Instruction Length:  4     Interrupt Code:   04
        Exception Address:  00000000_00000000
        Execution key at Program Check/Abend:  9     Addressing Mode:  31
        Space at Program Check/Abend:  Basespace
        Breaking Event Address:  00000000_27ED52CC - offset 000002CC in module DFYI760
        64-BIT REGISTERS 0-15
        GPR 0-3  00000000_24F3A890  00000000_24F30050  00000000_24F3BB08  00000000_00000000
        GPR 4-7  00000000_27ED5060  00000000_24AEE7C0  00000000_24AEE778  00000000_00000000
        GPR 8-B  00000000_24F339F0  00000000_24F3B938  00000000_27ED5130  00000000_27ED5264
        GPR C-F  00000000_27ED5124  00000000_24F3A748  00000000_24F3BA8C  00000000_00000000
      

      速報イベント演説ブレークイベントアドレスレジスタ(BEAR)からフォーマットされた、プログラムチェック前の最後の成功した分岐のアドレスを提供し、通常は次のような結果をもたらすワイルドブランチタイプの問題を診断するのに非常に役立ちます。0C1または0C4可能な場合は異常終了します。 カーネルドメインがCICSダンプでは、BEARデータはカーネルエラー情報にタイトル付きでフォーマットされます。速報イベント演説。 のCICSダンプ フォーマッタは、BEAR のモジュールとオフセットを識別し、PSWDATA と呼ばれる PSW のデータと、BEARDATA と呼ばれる BEAR のデータをフォーマットしようとします。

      CICSVERBX は PSW から障害のあるモジュールを特定し、可能であればモジュール名とオフセットを表示します。 オフライン ダンプ フォーマッタは、元の失敗メッセージよりも多くの情報を使用するため、元の失敗メッセージが役に立たない場合 (モジュール内のオフセット FFFFFFFF)、ダンプ フォーマッタの方が情報量が豊富になることがよくあります。

      パネルから下にスクロールすると、多くの場合、障害のあるモジュールが、先頭から割り込みアドレスプラス 256 バイトまで印刷されます。 CICSVERBX は、汎用レジスタの値がアドレスであると想定し、64 ビット、31 ビット、および 24 ビットのアドレスを使用して、これらのアドレスの前後のストレージを出力します。

  3. PSW がわかれば、障害が発生しているモジュールを特定します。
    1. オプションを入力1 IPCS 基本オプション メニューからダンプ データ セットを参照します。
    2. PSW の 4 番目のワードをポインター アドレス フィールドに入力します。
    3. ストレージが表示されたら、F7ロード モジュールのアイ キャッチャーが表示されるまで上にスクロールします。 ロード モジュール名の後には通常、日付とタイムスタンプが続きます。 PSW アドレスからロード ポイントを減算して、モジュール内のオフセットを計算します。 これは異常終了が発生したオフセットです。
    4. IFstorage not available表示する場合は、入力してくださいip where nnnnnnnnどこんんんんんPSW の 4 番目の単語です。 モジュールがオペレーティング システムによって LPA または Nucleus からロードされた場合、モジュール名とモジュール内のオフセットが表示されます。

モジュール名とオフセットがわかったら、CICSサポート ページまたはお気に入りの検索エンジンから。 検索引数には次のようなキーワードを使用します。
DFHAP0001 DFHAPDM 0C4

  1. トランザクション・ダンプ内のさまざまなプログラム域の開始アドレスと終了アドレスを記録します。
    PSW から取得した次の順次命令アドレスがいずれかのプログラム内にあるか確認します。 ある場合、それが、割り込みが発生したプログラムです。 最後に実行されたコマンドを識別するには、 「最後のコマンドまたはステートメントの検索」 で説明されている手順を使用します。
    そのアドレスがすべてのプログラムの外部 にある場合、2 つの事態のいずれかが発生した可能性があります。
    • プログラム・チェックが発生したプログラムはユーザーのために実行されていましたが (例えば、VSAM や DL/I)、CICS によって制御されていませんでした。 通常この原因は、誤ったパラメーターがプログラムに渡されたかパラメーターが誤った順序で渡されたことです。 これらは通常、該当する戻りコードによってキャッチされ、フラグが立てられますが、特定の組み合わせが問題を引き起こすことがあります。
    • あなたのプログラムは野生他のストレージに分岐します。 PSW から取得したアドレスが奇数で終わっている場合は、これが該当すると考えられます。有効な命令は常に偶数アドレスにあるためです。 このアドレスは、CICS アドレス・スペース内または仮想ストレージのどこか別の場所にある可能性があります。

      多くの場合、誤った分岐はアドレス 0 (ゼロ) に進みます。その分岐アドレスを含むレジスターがゼロに設定されるためです。 このような分岐が発生すると、PSW には通常アドレス X'00000004' が含まれます。

  2. レジスターの内容を調べて、そのいずれかに PSW から取得した次の順次命令アドレスまたは類似のものが含まれているかどうかを確認します。
    この方法は、誤ったアドレスに至った経緯を特定するのに役立つ可能性があります。

    PSW がプログラムのいずれかにある命令を指している場合、次の検討対象は発生したプログラム・チェックのタイプです。 そうでない場合は、直接「 問題をさらに分析する 」に進んでください。