jueves, 26 de marzo de 2009

Donde ocurrio un 0C7

Hoy vamos a ver como detectar donde se produjo un error 0C7
(CEE3207S System detected a data exception(Code=0C7))

Cuando un programa finaliza con un error 0C7 quiere decir que en alguna parte del mismo se esta intentando asignar datos de un tipo no aceptado por la variable destino. Como podría ser intentar pasar letras a una variable numérica.... etc

En programas grandes suele ser muy dificultoso darse cuenta cual es la variable en conflicto por eso hoy vamos a utilizar datos de la compilación para poder identificar rápido y fácilmente donde se produce el error.

-El primer paso es ejecutar el programa, y luego de producirse el error acceder a la sysout del job y copiar las cifras significativas (6 ultimas) del offset en el que indica que sucede el error.

-Luego volvemos a compilar el programa pero agregando al job de compilacion los parametros LIST, MAP. Estos generaran una referencia cruzada entre los offset y las sentencias.

Ej:
//COBOLMVS EXEC PGM=VIACOBII,
//PARM=('C,RES,RENT,FSRT,NOSEQ,VBREF,TRUNC(OPT),OFF',
//'DATA(31),XREF,APOST,NONUM,LIST,MAP,NOOPT,LIB,F(I ,I)'),
//COND=(7,LT),REGION=4096K
//*STEPLIB DD DSN=SYS1.ADCOB.SIGYCOMP,DISP=SHR

-Finalizada la compilacion accedemos a la salida del Job de compilacion y buscamos el offset que teniamos. Alli nos encontraremos con el tipo de sentencia COBOL que produjo el error y un codigo de linea en el codigo sobre la cual se produjo el error.

Ej:
LINE # HEXLOC VERB
006469 000D6A MOVE
006480 000D8E STOP

-Buscamos ese codigo de linea en la sysout en la que estamos y encontraremos la linea exacta del codigo en la que se produjo el data exception.

Espero les haya sido util, y cualquier cosa no duden en preguntar.

Saludos

2 comentarios:

  1. Hola, muchas gracias por el dato! pero tengo un inconveniente, pese a haber agregado el LIST Y MAP como parametros no me aparece el HEXLOC en la salida de la compilacion, se te ocurre como puedo resolverlo?.
    Muchas gracias.

    ResponderEliminar
  2. Muchas gracias, tu información me ayudó a encontrar un error.
    Saludos!

    ResponderEliminar