ワイルドブランチのモニターについて
search cancel

ワイルドブランチのモニターについて

book

Article ID: 238024

calendar_today

Updated On:

Products

InterTest - CICS

Issue/Introduction

モニタリングのプログラムから、分岐命令によって他プログラムに直接制御を渡すようなコードがあると、モニタリングが自動ブレークポイント(ABP)にて中断します。
ABPを発生させずにモニタリングを続行する方法を教えてください。

Environment

Release: ALL

Resolution

InterTest for CICSでは、モニタリング中のプログラムがXCTLマクロまたはLINKマクロ/コマンドのCICSサービスではなく、分岐命令によって他プログラムに直接制御を渡す場合、これを「ワイルドブランチ」(モニタリングブログラム外への分岐)発生としてABPにて実行を中断します。通常、直接分岐命令はCALLステートメントもしくは直接分岐を目的とするマクロにて実行されます。InterTest for CICSのモニタリングは、CICSから制御を受けたプログラムが対象となりますので、直接分岐先のプログラムはABPによるモニタリング中断対象となります。

モニタリング中のプログラム内に直接分岐にて他プログラムに制御を渡す処理がある場合、直接分岐する際のコードを調査し、そのコードをInterTest for CICSのモジュールIN25UEXIに組み込むことで、直接分岐処理を除外することができます。これにより、ワイルドブランチによるABP発生を防止し、直接分岐後のコードを引き続きモニタリングすることができます。


● 直接分岐する際のコードの調査手順

CAI.CAVHMAC内に任意のメンバーを作成し、そのメンバーにモニタリング対象外としたいプログラムのENTRY情報を記述します。

CAI.CAVHMAC内でUEXIにて始まるメンバーが、InterTest for CICSで除外対象の製品について標準で組み込まれているENTRY情報メンバーです。
また、CAI.CAVHSAMP内でUEXIにて始まるメンバーは、標準では組み込まれていない製品のENTRY情報メンバーとなります。

これらのメンバーを参考に、モニタリング対象から除外したいENTRY情報を作成します。  

ENTRY情報の取得手順は以下の通りです。

1.実際に呼び出している命令をコンパイルリストもしくLISTで調査。                         
2.APIを呼び出しているCALLステートメントにUBPを設定、モニタリング開始。
3.UBPで実行中断している状態でCBPを設定。

    設定例
  【CNTL=ON*,CBP=.ANY,IF=CURR.EQ.X'05EF'】
    05EFは分岐名命令が BALR 14,15 であった場合

    分岐名命令が BASSM 14,15 であれば、
    CBP命令は【CNTL=ON*,CBP=.ANY,IF=CURR.EQ.X'0CEF'】。

4.モニタリング再開。
5.CBPで実行中断。
6.コマンドラインからPROFILEコマンドを実行。

    PROFILE画面で【DISPLAY TITLES】を【R】に設定。
    KEEP WINDOWをXでなくし、全画面表示とする。

7.画面に表示されているレジスターでR15の頭一バイトを%で上書きしENTER。
8.表示された16バイト分を記録。
9.以下を参照にENTRY情報データを定義。

● サンプル定義 CAI.CAVHSAMP(UEXITELN)

         IN25UEX CALL=TLRATIO,LENGTH=16                                
TLRATIO  CSECT                                                         
TLRATIO  AMODE 31                                                      
TLRATIO  RMODE ANY                                                     
         DC    X'90ECD00C183F4510300E285C000058F0'                     

 

● IN25UEXI 組込みサンプルJCL

モニタリング対象外とするコード定義をIN25UEXI に組込むJCLは以下がサンプルJCLとなります。

CAI.CAVHMAC内に作成のメンバーをCOPY文に指定してください。

//IN25UEXI JOB ...
//ASM EXEC PGM=ASMA90,REGION=1024K,
// PARM='DECK,LIST,XREF(SHORT),ALIGN'
//SYSPRINT DD SYSOUT=A
//SYSPUNCH DD DSN=&&LOADSET,DISP=(NEW,PASS),UNIT=SYSDA,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=400),SPACE=(400,(100,100,1))
//SYSLIB DD DSN=CAI.CAVHMAC,DISP=SHR
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(5,1))
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(5,1))
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(5,1))
//SYSIN DD *
COPY UEXIIDMS CA IDMS
COPY UEXIDATA CA DATACOM
COPY UEXITELN CA TELON
COPY UEXISORT CA SORT
COPY UEXIMAST CA MASTERPIECE
COPY UEXIDB2 DB2
COPY UEXICPSM CICSPLEX SM
COPY UEXISOKT TCP/IP SOCKETS
*
* INSERT YOUR IN25UEX STATEMENTS FOR SPECIAL CALLS HERE
*
IN25UEX TYPE=FINAL
*
* INSERT ANY USER WRITTEN ROUTINE HERE
*
END TERMINATES THE ASSEMBLY OF IN25UEXI
/*
//LKED EXEC PGM=IEWL,REGION=512K,PARM=(XREF,LIST,MAP)
*
* INSERT ANY //SYSLIB STATEMENTS FOR SPECIAL LOADLIBS HERE
*
//SYSLMOD DD DSN=yourlib,DISP=SHR
//SYSUT1 DD UNIT=SYSDA,DCB=BLKSIZE=1024,SPACE=(1024,(200,200))
//SYSPRINT DD SYSOUT=A
//SYSLIN DD DSN=&&LOADSET,DISP=(OLD,DELETE)
// DD *
ENTRY IN25UEXI
NAME IN25UEXI(R)
//

 

Additional Information

Old Japanese Knowledge document ID: JTEC003068

CA InterTest/CA SymDumpのその他FAQについては、以下のリンクからご確認ください。

InterTest/CA SYmDump FAQ一覧表