编写程序错误程序

您可以编写基于提供的缺省程序 DFHPEP 的程序错误程序。

CICS提供的缺省程序错误程序 (DFHPEP) 包含用于获取程序可寻址性,访问通信区域以及通过 EXEC CICS RETURN 命令将控制权返回给 CICS® 的代码。

DFHPEP 的源以汇编语言和 C 版本提供; 您可以修改其中一个以包含自己的逻辑,也可以使用 CICS支持的任何语言编写自己的程序错误程序。 程序错误程序受到特定限制:
  • 程序的名称必须是 DFHPEP。
  • 程序不得发出任何使用 MRO 或 ISC 工具的 EXEC CICS 命令,例如分布式事务处理或函数输送。
  • 程序不得发出任何访问可恢复资源的命令。
  • 程序无法影响是否执行事务转储。

缺省 DFHPEP 模块是哑元模块。 要对其进行定制,您必须自行对源进行编码。 图 1中提供了 DFHPEP 的列表。 在编写程序错误程序之后,对其进行翻译和组装,并使用它来替换提供的哑元程序。 有关组装和链接编辑用户可替换程序所需的作业控制语句的信息,请参阅 组装和链接编辑用户可替换程序

在通信区域中提供给 DFHPEP 的信息包括:
  • 当前异常终止代码,位于 PEP_COM_CURRENT_ABEND_CODE。
  • 原始异常终止代码,位于 PEP_COM_ORIGINAL_ABEND_CODE。 如果事务迂到多个异常终止,那么原始异常终止代码和当前异常终止代码不同; 例如,如果失败的程序在处理先前异常终止时异常终止。 在这种情况下,原始异常终止是事务迂到的第一个异常终止。
  • 上次 EXEC CICS 命令时的 EIB ,位于 PEP_COM_USERS_EIB。
  • 在 PEP_COM_ABPROGRAM 中发生 (当前) 异常终止的程序的名称。 PEP_COM_ABPROGRAM 按如下所示标识程序:
    • 如果在远程系统中运行的分布式程序链接 (DPL) 服务器程序中发生异常终止,那么它标识服务器程序。
    • 如果异常终止是本地 ASRA , ASRB 或 ASRD 异常终止,那么它将标识发生程序检查或操作系统异常终止的程序。
    • 在所有其他情况下,它标识当前程序。
  • (当前) 异常终止时的程序状态字 (PSW) ,位于 PEP_COM_PSW 或 PEP_COM_PSW16 (对于 16 字节 PSW)。 PSW 的完整内容仅适用于 ASRA , ASRB 和 ASRD 异常终止代码。 最后四个字节的 PEP_COM_PSW 和最后八个字节的 PEP_COM_PSW16 (PSW 地址) 也适用于 AICA 代码。
  • GP 寄存器 (0-15) 在 (当前) 异常终止时,在EP_COM_寄存器处。
  • 程序在遭受 (当前) 异常终止时的执行键,位于 PEP_COM_KEY。 PEP_COM_KEY 的值仅对 ASRA 和 ASRB 异常终止代码有效。
  • 在 EP_COM_STORAGE_HIT 处,是否由于存储器保护异常而发生 (当前) 异常终止。 EP_COM_STORAGE_HIT 的值仅对 ASRA 异常终止代码有意义,并指示发生故障的程序尝试覆盖哪些受保护的动态存储区 (CDSA , RDSA , ECDSA , ERDSA , ETDSA , GCDSA 或 GUDSA) (如果有)。
  • 可能提供了其他寄存器信息。 附加信息可能包括 64 位 GP 寄存器,访问寄存器,浮点寄存器和向量寄存器。 在通信区域中设置指示符以指示哪些寄存器值可用。
  • 如果可用,那么 "中断事件地址" 将存储在通信区域中。 如果它不可用,那么 "中断事件地址" 为零。
  • 程序状态字中断信息,位于 PEP_COM_INT。

仅当在本地系统中发生异常终止时,有关应用程序尝试覆盖的 PSW ,寄存器,执行密钥和受保护存储器类型的信息才有意义; 如果在远程系统中运行的 DPL 服务器程序中发生异常终止,那么这些字段设置为零。

要禁用事务,请向 PEP_COM_RETURN_CODE 字段分配值 EP_COM_RETURN_DISABLE。 否则,请允许该字段缺省为零,或者将其设置为值 PEP_COM_RETURN_OK。 CICS 不允许禁用 CICS提供的事务; 因此,请勿尝试禁用以字母 C 开头的标识的事务。

图 1 显示缺省程序错误程序的汇编语言源代码。 图 2图 4 显示了通信区域的源代码。

图 1。 缺省程序错误程序 (DFHPEP) 的源代码
DFHEISTG DSECT ,
*
*        Insert your own storage definitions here
*
         DFHPCOM TYPE=DSECT
***********************************************************************
* * * * *              P R O G R A M   E R R O R              * * * * *
* * * * *                    P R O G R A M                    * * * * *
***********************************************************************
DFHPEP   CSECT                     PROGRAM ERROR PROGRAM CSECT
DFHPEP   RMODE ANY
         DFHREGS ,                 EQUATE REGISTERS
         XR    R1,R1
         ICM   R1,B'0011',EIBCALEN Get Commarea length
         BZ    RETURNX             ...no Commarea; exit
         EXEC CICS ADDRESS COMMAREA(R2) ,
         USING DFHPEP_COMMAREA,R2
*
*        Insert your own code here
*
         LA    R1,PEP_COM_RETURN_OK
         B     RETURN
         DFHEJECT
*
RETURNER DS    0H                  Return for error cases
         LA    R1,PEP_COM_RETURN_DISABLE
RETURN   DS    0H
         ST    R1,PEP_COM_RETURN_CODE
RETURNX  DS    0H
         EXEC CICS RETURN ,
         END   DFHPEP
 

图 2图 4 显示缺省程序错误程序的通信区域的汇编语言源代码。

图 2。 DFHPEP 通信区域的源 (汇编语言)
DFHPEP_COMMAREA DSECT
*
*                      Standard header section
*
PEP_COM_STANDARD              DS     0F
PEP_COM_FUNCTION              DS     CL1       Always '1'
PEP_COM_COMPONENT             DS     CL2       Always 'PC'
PEP_COM_RESERVED              DS     C         Reserved
*
*                      Abend codes and EIB
*
PEP_COM_CURRENT_ABEND_CODE    DS     CL4       Current abend code
PEP_COM_ORIGINAL_ABEND_CODE   DS     CL4       Original abend code
PEP_COM_USERS_EIB             DS     CL(EIBRLDBK-EIBTIME+L'EIBRLDBK)
*                                       EIB at last EXEC CICS command
*
*  Debugging information (program, PSW, registers and execution key at
*  time of abend, hit storage indicator).  If the abend occurred in a
*  DPL server program running remotely, only program is meaningful.
*
PEP_COM_DEBUG                 DS     0F
PEP_COM_ABPROGRAM             DS     CL8       Program causing abend
PEP_COM_PSW                   DS     CL8       PSW at abend
*                                              (codes ASRA, ASRB, AICA, ASRD)
PEP_COM_REGISTERS             DS     CL64      GP registers at abend
*                                              (registers 0-15)
PEP_COM_KEY                   DS     X         Execution key at abend
*                                              (ASRA and ASRB only)
PEP_COM_USER_KEY              EQU    9         User key
PEP_COM_CICS_KEY              EQU    8         CICS key
*
PEP_COM_STORAGE_HIT           DS     X         Storage type hit by 0C4
*                                              (ASRA only)
PEP_COM_NO_HIT                EQU    0         No hit, or not 0C4
PEP_COM_CDSA_HIT              EQU    1         CDSA hit
PEP_COM_ECDSA_HIT             EQU    2         ECDSA hit
PEP_COM_ERDSA_HIT             EQU    3         ERDSA hit
PEP_COM_RDSA_HIT              EQU    4         RDSA hit
PEP_COM_EUDSA_HIT             EQU    5         EUDSA hit
PEP_COM_UDSA_HIT              EQU    6         UDSA hit
PEP_COM_ETDSA_HIT             EQU    7         ETDSA hit
PEP_COM_GCDSA_HIT             EQU    8         GCDSA hit
PEP_COM_GUDSA_HIT             EQU    9         GUDSA hit
*
图 3。 DFHPEP 通信区 (汇编语言) 的源继续
PEP_COM_SPACE                 DS     X         Subspace/basespace
PEP_COM_NOSPACE               EQU    0
PEP_COM_SUBSPACE              EQU    10        Abending task was in
*                                              subspace
PEP_COM_BASESPACE             EQU    11        Abending task was in
*                                              basespace
PEP_COM_PADDING               DS     CL2       Reserved
*
*                      Return code
*
PEP_COM_RETURN_CODE           DS     F
PEP_COM_RETURN_OK             EQU    0
PEP_COM_RETURN_DISABLE        EQU    4         Disable transaction
*
*       Additional Program status word information
*
PEP_COM_INT                   DS     CL8       PSW interrupt codes
*
*       Breaking Event Address
*
PEP_COM_BEAR                  DS     AD        Breaking Event Addr

*
*
*       Additional register information
*
                              DS     0D        Force alignment
PEP_COM_FLAG1                 DS     X         Flag byte
PEP_COM_GP64_REGS_AVAIL       EQU    X'80'     64 bit register values
*                                              available in 
*                                              PEP_COM_G64_REGISTERS
PEP_COM_ACCESS_REGS_AVAIL     EQU    X'40'     64 bit register values
*                                              available in 
*                                              PEP_COM_ACCESS_REGISTERS
PEP_COM_ORIGINAL_FPR_AVAIL    EQU    X'20'     FPR 0, 2, 4 & 6 values
*                                              available in 
*                                              PEP_COM_FP_REGISTERS
PEP_COM_ADDITIONAL_FPR_AVAIL  EQU    X'10'     All FPR available in
*                                              PEP_COM_FP_REGISTERS &
*                                              FPCR in
*                                              PEP_COM_FPC_REGISTER
                              DS     CL7       Reserved
PEP_COM_GP64_REGISTERS        DS     CL128     64 bit GP registers
PEP_COM_FP_REGISTERS          DS     0CL132    FP registers
PEP_COM_FP_REGISTER0          DS     FD        FP register 0
PEP_COM_FP_REGISTER1          DS     FD        FP register 1
PEP_COM_FP_REGISTER2          DS     FD        FP register 2
PEP_COM_FP_REGISTER3          DS     FD        FP register 3
PEP_COM_FP_REGISTER4          DS     FD        FP register 4
PEP_COM_FP_REGISTER5          DS     FD        FP register 5
PEP_COM_FP_REGISTER6          DS     FD        FP register 6
PEP_COM_FP_REGISTER7          DS     FD        FP register 7
PEP_COM_FP_REGISTER8          DS     FD        FP register 8
PEP_COM_FP_REGISTER9          DS     FD        FP register 9
PEP_COM_FP_REGISTER10         DS     FD        FP register 10
PEP_COM_FP_REGISTER11         DS     FD        FP register 11
PEP_COM_FP_REGISTER12         DS     FD        FP register 12
PEP_COM_FP_REGISTER13         DS     FD        FP register 13
PEP_COM_FP_REGISTER14         DS     FD        FP register 14
PEP_COM_FP_REGISTER14         DS     FD        FP register 15
PEP_COM_FPC_REGISTER          DS     F         FPC register
PEP_COM_ACCESS_REGISTERS      DS     CL64      Access registers
*
图 4: DFHPEP 通信区 (汇编语言) 的源继续
*
*                             16 byte PSW at time of abend
*
PEP_COM_PSW16                 DS     CL16      16 byte PSW
*
*                             Vector Register Information
*
PEP_COM_VR_REGISTERS          DS     0CL512    VR registers   
PEP_COM_VR_REGISTER0          DS     CL16      VR Register 0  
PEP_COM_VR_REGISTER1          DS     CL16      VR Register 1  
PEP_COM_VR_REGISTER2          DS     CL16      VR Register 2  
PEP_COM_VR_REGISTER3          DS     CL16      VR Register 3  
PEP_COM_VR_REGISTER4          DS     CL16      VR Register 4  
PEP_COM_VR_REGISTER5          DS     CL16      VR Register 5  
PEP_COM_VR_REGISTER6          DS     CL16      VR Register 6  
PEP_COM_VR_REGISTER7          DS     CL16      VR Register 7  
PEP_COM_VR_REGISTER8          DS     CL16      VR Register 8  
PEP_COM_VR_REGISTER9          DS     CL16      VR Register 9  
PEP_COM_VR_REGISTER10         DS     CL16      VR Register 10 
PEP_COM_VR_REGISTER11         DS     CL16      VR Register 11 
PEP_COM_VR_REGISTER12         DS     CL16      VR Register 12 
PEP_COM_VR_REGISTER13         DS     CL16      VR Register 13 
PEP_COM_VR_REGISTER14         DS     CL16      VR Register 14 
PEP_COM_VR_REGISTER15         DS     CL16      VR Register 15 
PEP_COM_VR_REGISTER16         DS     CL16      VR Register 16 
PEP_COM_VR_REGISTER17         DS     CL16      VR Register 17 
PEP_COM_VR_REGISTER18         DS     CL16      VR Register 18 
PEP_COM_VR_REGISTER19         DS     CL16      VR Register 19 
PEP_COM_VR_REGISTER20         DS     CL16      VR Register 20 
PEP_COM_VR_REGISTER21         DS     CL16      VR Register 21 
PEP_COM_VR_REGISTER22         DS     CL16      VR Register 22 
PEP_COM_VR_REGISTER23         DS     CL16      VR Register 23 
PEP_COM_VR_REGISTER24         DS     CL16      VR Register 24 
PEP_COM_VR_REGISTER25         DS     CL16      VR Register 25 
PEP_COM_VR_REGISTER26         DS     CL16      VR Register 26 
PEP_COM_VR_REGISTER27         DS     CL16      VR Register 27 
PEP_COM_VR_REGISTER28         DS     CL16      VR Register 28 
PEP_COM_VR_REGISTER29         DS     CL16      VR Register 29 
PEP_COM_VR_REGISTER30         DS     CL16      VR Register 30 
PEP_COM_VR_REGISTER31         DS     CL16      VR Register 31 

*                             length of DFHPEP_COMMAREA
*
PEP_COM_LEN EQU *-PEP_COM_STANDARD