Descubrimiento del lugar donde ha ocurrido un error de programa

Cuando una transacción termina de forma anómala con el código ASRA o ASRD y se ha producido un vuelco del sistema de la comprobación del programa, lo primero que debe hacer es averiguar dónde se ha producido la comprobación del programa. CICS® intenta establecer esto para usted.

Acerca de esta tarea

Un registro del programa erróneo y el desplazamiento de la comprobación del programa dentro del módulo de carga del programa se encuentran en los siguientes lugares:
  • Mensaje DFHAP0001 o DFHSR0001, que precede a la terminación anómala
    Por ejemplo:
    DFHAP0001 Se ha producido una terminación anómala (código 0C4/AKEA) en el desplazamiento X'FFFFFFFF ' en el módulo CICS-module.
    DFHSR0001 Se ha producido una terminación anómala (código 0C7/AKEA) en el desplazamiento X'FFFFFFFF ' en el programa programa-usuario.
    DFHSR0001 Se ha producido una terminación anómala (código 0C1/AKEA) en el desplazamiento X'FFFFFFFF ' en el programa -noheda-.
  • El bloque de control de terminación anómala de transacción (TACB), que se ha creado para describir la terminación anómala
  • ID de punto de rastreo de excepción AP 0781 para una terminación anómala ASRA, o AP 0783 para una terminación anómala ASRD
CICS examina la palabra de estado de programa (PSW) e intenta determinar la instrucción que provoca la terminación anómala y el programa (o módulo) que se estaba ejecutando cuando se produce la anomalía. Si CICS no puede determinar el programa (o módulo) en el que se encuentra PSW, CICS utiliza la siguiente información en el texto del mensaje:
  • Desplazamiento X'FFFFFFFF ' en lugar de un desplazamiento real
  • El nombre del "último" programa (o módulo) conocido para CICS, que puede o no haber sido la causa del error

Consulte Interpretación de vuelcos de transacción.

Procedimiento

  1. Busque el desplazamiento de la comprobación del programa dentro del módulo de carga del programa.
    El desplazamiento indica el punto del programa en el que se ha producido la comprobación del programa. Tenga en cuenta que el desplazamiento se deriva de la siguiente dirección de instrucción secuencial de PSW y, por lo tanto, puede indicar la instrucción después de la que ha fallado.
    • Si el desplazamiento no es X'FFFFFFFF ', vaya a ¿Qué tipo de comprobación de programa se ha producido?.
    • Si el desplazamiento es X'FFFFFFFF ', CICS no ha podido establecer la ubicación de la comprobación del programa. En esta situación, debe utilizar el PSW para obtener la siguiente dirección de instrucción secuencial. Para localizar el PSW y los registros para la comprobación del programa. Continúe con el paso 2.
  2. Localice el PSW.
    El PSW se puede encontrar en los siguientes lugares:
    • El TACB para la terminación anómala
    • En la cabecera del vuelco de transacción formateado
    • Dentro del bloque de datos de error de kernel rastreado por los ID de punto de rastreo de excepción AP 0781 o AP 0783
    1. Introduzca la opción 0 en el menú de opciones primarias de IPCS para visualizar el panel de valores predeterminados de 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. Especifique DSNAME('xxxxx.xxxxx.xxxx') a la derecha de Origen , donde xxxxx.xxxxx.xxxx es el nombre del conjunto de datos de volcado. A continuación, especifique Intro y F3 para volver al menú de opciones primario de IPCS.
      Source  ==> DSNAME('ONTOP.CICSPD.LABDUMPS.BEAR0C1.DUMP730')
    3. Introduzca la opción 6 en el menú de opciones primario IPCS para visualizar el panel Entrada de submandato 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. Especifique el mandato IPCS verbx dfhpdxxx 'ke' donde xxx es la versión y el release del vuelco de CICS (por ejemplo, 730 para CICS TS 5.6).

      Este mandato formatea el volcado y se visualiza en el resumen KE_TASK de dominio de kernel.

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

      La tabla siguiente lista las versiones de CICS TS y los niveles de producto correspondientes para su referencia.

      Tabla| 1. CICS TS y niveles de producto correspondientes
      CICS Versión de TS Nivel
      CICS TS 5.6 730
      CICS TS 5.5 720
      CICS TS 5.4 710
      CICS TS 5.3 700
      CICS TS 5.2 690
      CICS TS 5.1 680
      CICS TS 4.2 670
    5. Introduzca f *YES* para llegar a la tarea en ejecución que tenía la comprobación de programa.
      Puede haber más de uno. En el ejemplo siguiente, hay una tarea con *YES* bajo ERROR (KE_NUM 0157).
      
      ===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. Tome nota de KE_NUM, TCA_ADDR y del TRANSID de las tareas erróneas.
    7. Especifique f table para buscar el resumen de tabla de errores de dominio KE.
      Este es un resumen que contiene las últimas 50 terminaciones anómalas en la región desde que se inició. Por lo general, está interesado en los errores más recientes cuando consulte el resumen (las últimas entradas de la tabla) para la tarea en ejecución. Si hay varias comprobaciones de programa para la tarea, céntrese en la primera comprobación de programa porque las otras comprobaciones de programa son probablemente el resultado de la primera comprobación de programa.
      
      ===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   DFHYI730 000002F2
      
    8. Especifique ip st sys en la línea de mandatos para determinar la hora y fecha local en que se ha realizado el vuelco.
    9. Tome nota del ERR_NUM asociado con la comprobación de programa que tiene un ERR_TIME que coincide con la hora en que se realizó el vuelco y un KE_NUM que coincide con el KE_NUM encontrado en el Resumen de KE_TASK de dominio de kernel. Si hay más de una comprobación de programa para los mismos ERR_TIME y KE_NUM, céntrese en la primera comprobación de programa. Las otras comprobaciones de programa son probablemente el resultado de la primera comprobación de programa.
    10. Especifique f 'Number: xxxxxxxx' donde xxxxxxxx es el ERR_NUM de la comprobación de programa en la que ha decidido centrarse.
      Esta operación visualiza la entrada en la tabla Error de dominio KE para el número de error que especifique.
      Captura de pantalla que muestra la operación que muestra la entrada en la tabla Error de dominio KE para el número de error que especifique
    11. Compare las direcciones en el offset X'4C' y offset X'134' en los DATOS DE ERROR DEL KERNEL.

      La dirección en el offset X'4C' es la cuarta palabra del PSW CICS, y la dirección en el offset X'134' es la cuarta palabra del PSW de z/OS®. Si las direcciones son diferentes, utilice el PSW de z/OS y los registros. De lo contrario, utilice el PSW de CICS y los registros.

      El PSW de CICS se inicia en el desplazamiento x '40' y tiene 4 palabras de longitud. Los registros de CICS , de 0 a 15, empiezan en el desplazamiento X'68 ' y cada registro tiene una longitud de 2 palabras.

      El PSW z/OS se inicia en el desplazamiento x '128' y tiene 4 palabras de longitud. Los registros de z/OS , del 0 al 15, empiezan en el desplazamiento x '150' y cada registro tiene una longitud de 2 palabras.

    12. Utilice F8 para desplazarse hacia abajo para ver el PSW y los registros formateados de CICS .

      IPCS CICS VERBX formateará el PSW de z/OS y se registrará si el PSW de z/OS es diferente del PSW de CICS . Si las PSW son las mismas, CICS VERBX no duplica la información.

      
      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 DFYI730
        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
      

      La Dirección de suceso de interrupción, formateada desde el registro de dirección de suceso de interrupción (BEAR), le proporciona la dirección de la última ramificación satisfactoria antes de la comprobación del programa, y puede ser muy útil para diagnosticar tipos de ramificación comodín de problemas que normalmente dan como resultado 0C1 o 0C4 terminaciones anómalas, si están disponibles. Cuando el dominio de kernel se formatea en un volcado CICS , los datos BEAR se formatean en la información de error de kernel con el título Dirección de suceso de interrupción. El formateador de volcado CICS intenta identificar el módulo y el desplazamiento del BEAR, e intenta formatear los datos en el PSW, denominado PSWDATA, y los datos en el BEAR, denominado BEARDATA.

      CICS VERBX intenta determinar el módulo anómalo a partir del PSW y muestra el nombre del módulo y el desplazamiento si es posible. El formateador de volcado fuera de línea utiliza más información que el mensaje de anomalía original, y tan a menudo, cuando el mensaje de anomalía original no es útil (desplazamiento FFFFFFFF en el módulo), el formateador de volcado es más informativo.

      Al desplazarse hacia abajo desde el panel, a menudo puede obtener el módulo anómalo impreso desde el principio hasta la dirección de interrupción más 256 bytes. CICS VERBX también presupone que los valores de los registros generales son direcciones e imprime el almacenamiento antes y después de estas direcciones, utilizando direcciones de 64 bits, 31 bits y 24 bits.

  3. Conocer el PSW, determinar el módulo en el que se produce la anomalía:
    1. Introduzca la opción 1 en el menú de opciones principal de IPCS para examinar el conjunto de datos de volcado.
    2. Escriba la cuarta palabra de la PSW en el campo Dirección de puntero.
    3. Si se visualiza el almacenamiento, especifique F7 para desplazarse hacia arriba hasta que vea un captador de atención para un módulo de carga. Los nombres de módulo de carga suelen ir seguidos de una indicación de fecha y hora. Calcule un desplazamiento dentro del módulo restando el punto de carga de la dirección PSW. Es el desplazamiento en el que se ha producido la terminación anómala.
    4. Sistorage not available, especifique ip where nnnnnnnn donde nnnnnnnn es la cuarta palabra del PSW. Si el sistema operativo ha cargado el módulo desde el LPA o Nucleus, esto mostrará el nombre del módulo y el desplazamiento dentro del módulo.

Ahora que conoce el nombre del módulo y el desplazamiento, busque un problema conocido en la página de soporte de CICS o en su motor de búsqueda favorito. Utilice palabras clave como las siguientes para un argumento de búsqueda:
DFHAP0001 DFHAPDM 0C4

  1. Tenga en cuenta las direcciones de inicio y finalización de las distintas áreas de programa en el volcado de transacción.
    ¿Es la siguiente dirección de instrucción secuencial del PSW en cualquiera de los programas? Si es así, es el programa en el que se ha producido la interrupción. Utilice el procedimiento descrito en Localización del último mandato o sentencia para identificar el último mandato ejecutado.
    Si la dirección está fuera de todos los programas, es probable que se haya producido una de dos cosas.
    • El programa en el que se ha producido la comprobación del programa se estaba ejecutando en su nombre (por ejemplo, VSAM o DL/I), pero no bajo el control de CICS . Esto suele deberse a que se han pasado parámetros incorrectos al programa o a que se han pasado parámetros en la secuencia incorrecta. Normalmente se capturan y se marcan con un código de retorno adecuado, pero ciertas combinaciones pueden causar problemas.
    • Es posible que el programa haya tomado una rama wild en algún otro fragmento de almacenamiento. Si la dirección de la PSW termina en un número impar, este es probablemente el caso, ya que las instrucciones válidas siempre están en una dirección par. La dirección podría estar dentro del espacio de direcciones CICS o en cualquier otro lugar del almacenamiento virtual.

      A menudo, se toma una rama comodín para la dirección cero, porque el registro que debe contener la dirección de rama se establece en cero. El PSW normalmente contiene la dirección X'00000004 ' después de que se haya producido una ramificación de este tipo.

  2. Compruebe el contenido del registro para ver si alguno de ellos contiene la siguiente dirección de instrucción secuencial del PSW o algo parecido.
    Esto podría ayudarle a averiguar cómo llegó a la dirección equivocada.

    Si la PSW apunta a una instrucción en uno de sus programas, lo siguiente a considerar es el tipo de comprobación de programa que ocurrió. De lo contrario, vuelva directamente a Análisis adicional del problema.