Depurador EGL

Cuando esté en el entorno de trabajo, el depurador EGL le permite depurar código EGL sin que primero tenga que generar la salida. Se aplican las siguientes categorías:
Si trabaja en un programa por lotes que intenta desplegar en un contexto J2EE, puede utilizar la configuración de lanzamiento para depurar el programa en un contexto no J2EE. Aunque la configuración es más simple, debe ajustar algunos valores:

Más adelante, una sección describe la interacción de los descriptores de construcción y las preferencias de EGL.

Modalidad del depurador

El depurador tiene dos modalidades: Java y COBOL, determinadas por la opción del descriptor de construcción system. Si no se utiliza ningún descriptor de construcción o si se establece el tipo de sistema en DEBUG como preferencia de depuración, la modalidad es Java.

La modalidad controla cómo actúa el depurador en situaciones en que el comportamiento de tiempo de ejecución EGL difiere para la salida Java y COBOL.

Mandatos del depurador

Utilice los siguientes mandatos para interactuar con el depurador EGL:
Añadir punto de interrupción
Identifica una línea en la que se interrumpe el proceso. Cuando se interrumpe la ejecución del código, puede examinar los valores de variable así como el estado de los archivos y pantallas.

Los puntos de interrupción se recuerdan de una sesión de depuración a la siguiente, a menos que elimine el punto de interrupción.

No se puede establecer un punto de interrupción en una línea en blanco ni en una línea de comentario.

Inhabilitar punto de interrupción
Desactiva un punto de interrupción pero no lo elimina.
Habilitar punto de interrupción
Activa un punto de interrupción que previamente se ha inhabilitado.
Eliminar punto de interrupción
Borra el punto de interrupción de modo que el proceso ya no se interrumpe automáticamente en la línea.
Eliminar todos los puntos de interrupción
Borra todos los puntos de interrupción.
Ejecutar
Ejecuta el código hasta el siguiente punto de interrupción o hasta que finaliza la unidad de ejecución. (En cualquier caso, el depurador se detiene en la primera sentencia de la función principal.)
Ejecutar hasta línea
Ejecuta todas las sentencias hasta (pero sin incluirla) la sentencia de una línea especificada.
Recorrer todo
Ejecuta la siguiente sentencia EGL y se interrumpe.
La lista siguiente indica lo que ocurre si se emite el mandato step into para un determinado tipo de sentencia:
call
Se detiene en la primera sentencia de un programa llamado si éste se ejecuta en el depurador EGL. Se detiene en la siguiente sentencia del programa actual si el programa llamado se ejecuta fuera del depurador EGL.

El depurador EGL busca el programa receptor en cada uno de los proyectos del entorno de trabajo.

converse
Espera la entrada de usuario. Esta entrada hace que el proceso se detenga en la siguiente sentencia en ejecución, que puede estar en una función de validador.
forward
Si el código se reenvía a un manejador de páginas, el depurador espera la entrada de usuario y se detiene en la siguiente sentencia en ejecución, que puede estar en una función de validador.

Si el código se reenvía a un programa, el depurador se detiene en la primera sentencia de dicho programa.

function invocation
Se detiene en la primera sentencia de la función.
JavaLib.invoke y funciones relacionadas
Se detiene en la siguiente sentencia Java, de modo que se puede depurar el código Java que está disponible mediante las funciones de acceso Java.
show, transfer
Se detiene en la primera sentencia del programa que recibe el control. El programa destino es el fuente EGL que se ejecuta en el depurador EGL y no es el código generado por EGL.
Después de una sentencia show o de una sentencia transfer del tipo transferir a transacción, el depurador EGL cambia al descriptor de construcción del nuevo programa, o bien (si este descriptor de construcción está siendo utilizado) solicita al usuario un nuevo descriptor de construcción. El nuevo programa puede tener un conjunto distinto de propiedades respecto del programa que se ha ejecutado anteriormente.el comportamiento del depurador EGL depende de la modalidad del depurador:
  • En modalidad Java, el depurador EGL cambia al descriptor de construcción del nuevo programa, o bien (si este descriptor de construcción está siendo utilizado) solicita al usuario un nuevo descriptor de construcción. El nuevo programa puede tener un conjunto distinto de propiedades respecto del programa que se ha ejecutado anteriormente.
  • En modalidad COBOL, el descriptor de construcción del programa anterior sigue utilizándose y el nuevo programa no puede tener un conjunto distinto de propiedades.

El depurador EGL busca el programa receptor en cada uno de los proyectos del entorno de trabajo.

Recorrer principal
Ejecuta la siguiente sentencia EGL y se interrumpe, pero no se detiene en las funciones que se invocan desde la función actual.
La lista siguiente indica lo que ocurre si se emite el mandato step over para un determinado tipo de sentencia:
converse
Espera la entrada de usuario y luego omite cualquier función de validación (a menos que esté en vigor un punto de interrupción). Se detiene en la sentencia que sigue a la sentencia converse.
forward
Si el código se reenvía a un manejador de páginas, el depurador espera la entrada de usuario y se detiene en la siguiente sentencia en ejecución, pero no en una función de validador, a menos que esté en vigor un punto de interrupción.

Si el código se reenvía a un programa, el depurador se detiene en la primera sentencia de dicho programa.

show, transfer
Se detiene en la primera sentencia del programa que recibe el control. El programa destino es el fuente EGL que se ejecuta en el depurador EGL y no es el código generado por EGL.
Después de una sentencia show o de una sentencia transfer del tipo transferir a transacción, el depurador EGL cambia al descriptor de construcción del nuevo programa, o bien (si este descriptor de construcción está siendo utilizado) solicita al usuario un nuevo descriptor de construcción. El nuevo programa puede tener un conjunto distinto de propiedades respecto del programa que se ha ejecutado anteriormente.el comportamiento del depurador EGL depende de la modalidad del depurador:
  • En modalidad Java, el depurador EGL cambia al descriptor de construcción del nuevo programa, o bien (si este descriptor de construcción está siendo utilizado) solicita al usuario un nuevo descriptor de construcción. El nuevo programa puede tener un conjunto distinto de propiedades respecto del programa que se ha ejecutado anteriormente.
  • En modalidad COBOL, el descriptor de construcción del programa anterior sigue utilizándose y el nuevo programa no puede tener un conjunto distinto de propiedades.

El depurador EGL busca el programa receptor en cada uno de los proyectos del entorno de trabajo.

Recorrer hasta retorno
Ejecuta las sentencias necesarias para regresar a una función o programa invocador; a continuación, se interrumpe en la sentencia que recibe el control en dicha función o programa.

Se aplica una excepción si se emite el mandato step return en una función de validador. En este caso, el comportamiento es idéntico al de un mandato step into, que básicamente significa que el depurador EGL ejecuta la siguiente sentencia y se interrumpe.

El depurador EGL trata las siguientes sentencias EGL como si fueran operadores nulos:
  • sysLib.audit
  • sysLib.purge
  • sysLib.startTransaction

Por ejemplo, puede añadir un punto de interrupción en estas sentencias, pero un mandato step into simplemente continúa hasta la sentencia siguiente, que no tiene ningún otro efecto.

Finalmente, si emite el mandato step into o step over para una sentencia que es la última que se ejecuta en la función (y si dicha sentencia no es return, exit program o exit stack), el proceso se interrumpe en la propia función para que pueda revisar las variables que son locales a la función. Para continuar la sesión de depuración en este caso, emita otro mandato.

Utilización de descriptores de construcción

Un descriptor de construcción ayuda a determinar aspectos del entorno de depuración. El depurador EGL selecciona el descriptor de construcción de acuerdo con las siguientes normas:
  • Si ha especificado un descriptor de construcción de depuración para el programa o manejador de páginas, el depurador EGL utiliza dicho descriptor de construcción. Para obtener información detallada sobre cómo establecer el descriptor de construcción de depuración, consulte la sección Establecer los descriptores de construcción por omisión.
  • Si no ha especificado un descriptor de construcción de depuración, el depurador EGL le solicita que seleccione uno en la lista de descriptores de construcción o que acepte el valor None. Si acepta el valor None, el depurador EGL construye un descriptor de construcción que se utilizará durante la sesión de depuración; y una preferencia determina si se aplica la compatibilidad con VisualAge Generator.
  • Si ha especificado None o bien un descriptor de construcción que no tiene una parte de la información de conexión de base de datos necesaria, el depurador EGL obtiene la información de conexión revisando las preferencias. Para obtener los detalles sobre cómo establecer estas preferencias, consulte la sección Establecer las preferencias de las conexiones de base de datos SQL.

Si depura un programa que debe utilizarse en una aplicación de texto o por lotes de un entorno Java y si dicho programa emite una sentencia transfer que pasa el control a un programa que también debe utilizarse en una unidad de ejecución distinta de un entorno Java, el depurador EGL utiliza un descriptor de construcción que está asignado al programa receptor. La elección del descriptor de construcción se basa en las normas descritas anteriormente.

Si depura un programa que está llamado por otro programa, el depurador EGL utiliza el descriptor de construcción que está asignado al programa llamado. La elección del descriptor de construcción se basa en las normas descritas anteriormente, excepto que si no especifica un descriptor de construcción, el depurador no le solicita uno cuando se invoca el programa llamado; en su lugar, se sigue utilizando el descriptor de construcción del programa llamante.
Nota: Debe utilizar un descriptor de construcción distinto para el llamador y el programa llamado si uno de estos programas (pero no ambos) utiliza la compatibilidad con VisualAge Generator. El estado en tiempo de generación de la compatibilidad con VisualAge está determinado por el valor de la opción del descriptor de construcción VAGCompatibility.
Un componente descriptor de construcción o de asociaciones de recursos que se utiliza para depurar código puede ser distinto del que se utiliza para generar código. Por ejemplo, si tiene la intención de acceder a un archivo VSAM desde un programa que está escrito para un entorno COBOL, es probable que haga referencia a un componente de asociaciones de recursos del descriptor de construcción. El componente de asociaciones de recursos debe hacer referencia al sistema destino de tiempo de ejecución (por ejemplo, zOS) y debe hacer referencia a un tipo de archivo (por ejemplo, vsamrs) que sea apropiado para el sistema destino. La diferencia entre las dos situaciones es la siguiente:
  • Durante la generación, el componente de asociaciones de recursos indica el nombre de sistema del archivo que se utiliza en el entorno destino
  • Durante la depuración, el nombre de sistema debe reflejar otro convenio de denominación, según convenga, cuando se accede a un archivo VSAM remoto desde un programa Java generado por EGL en Windows 2000/NT/XP; para obtener información detallada sobre este convenio de denominación, consulte la sección Soporte de VSAM

Acceso a base de datos SQL

Para determinar el ID de usuario y la contraseña que deben utilizarse para acceder a una base de datos SQL, el depurador EGL considera las siguientes fuentes en orden hasta que se encuentra la información o bien se consideran todas las fuentes:
  1. El descriptor de construcción utilizado durante la depuración; concretamente, las opciones del descriptor de construcción sqlID y sqlPassword.
  2. La página de preferencias de SQL, como se describe en la sección Establecer las preferencias de las conexiones de base de datos SQL; en esta página, también se especifica otras informaciones sobre conexión.
  3. Un diálogo interactivo que se visualiza durante la conexión. Este diálogo sólo se visualiza si marca el recuadro de selección Solicitar ID de usuario y contraseña SQL cuando sea necesario.

Sentencia call

Como se ha indicado antes, el depurador EGL responde a una sentencia transfer o show interpretando el código fuente EGL. Sin embargo, el depurador EGL responde a una sentencia call, revisando el componente de opciones de enlace especificado en el descriptor de construcción, si existe. Si el componente de opciones de enlace al que se hace referencia incluye un elemento callLink para la llamada, el resultado es el siguiente:
  • Si la propiedad callLink remoteComType está establecida en DEBUG, el depurador EGL interpreta el código fuente EGL. El depurador busca el fuente haciendo referencia a las propiedades callLink package y location.
  • Si la propiedad callLink remoteComType no está establecida en DEBUG, el depurador invoca el código generado por EGL y utiliza la información del componente de opciones de enlace como si el depurador estuviera ejecutando un programa Java generado por EGL, aunque el depurador se ejecute en modalidad COBOL.
En ausencia de información de enlace, el depurador EGL responde a una sentencia call interpretando el código fuente EGL. La información de enlace no está disponible en los siguientes casos:
  • No se utiliza ningún descriptor de construcción; o bien
  • Se utiliza un descriptor de construcción, pero no se ha especificado ningún componente de opciones de enlace en dicho descriptor de construcción; o bien
  • Se ha especificado un componente de opciones de enlace en el descriptor de construcción, pero el componente al que se hace referencia no tiene un elemento callLink que hace referencia al programa llamado.

Si el depurador ejecuta el código fuente EGL, puede ejecutar sentencias en dicho programa emitiendo el mandato step into desde el llamador. Sin embargo, si el depurador llama al código generado, el depurador ejecuta todo el programa; el mandato step into funciona igual que el mandato step over.

Tipo de sistema utilizado durante la depuración

Un valor para el tipo de sistema está disponible en sysVar.systemType. Además, un segundo valor está disponible en VGLib.getVAGSysType si ha solicitado la compatibilidad con VisualAge Generator durante el desarrollo.

El valor en sysLib.systemType es el mismo que el valor de la opción del descriptor de construcción system, excepto que el valor es DEBUG en uno de estos dos casos:
  • Ha seleccionado la preferencia Establecer systemType en DEBUG, como se ha mencionado en la sección Establecer las preferencias del depurador EGL; o bien
  • Ha especificado NONE como descriptor de construcción que debe utilizarse durante la sesión de depuración, sea cual sea el valor de dicha preferencia.

La función de sistema VGLib.getVAGSysType devuelve el equivalente de VisualAge Generator del valor de sysLib.systemType; para obtener información detallada, consulte la tabla de VGLib.getVAGSysType.

Puerto del depurador EGL

El depurador EGL utiliza un puerto para establecer la comunicación con el entorno de trabajo Eclipse. El número de puerto por omisión es 8345. Si otra aplicación está utilizando ese puerto o si ese puerto está bloqueado por un cortafuegos, establezca un valor distinto tal como se describe en Establecer preferencias para el depurador EGL.

Si se especifica un valor que no sea 8345 como puerto de depurador EGL y si se va a depurar un programa EGL en el servidor J2EE, debe editar la configuración de servidor:
  1. Vaya a la pestaña Entorno, sección Propiedades del sistema
  2. Pulse Añadir
  3. Para Nombre, escriba com.ibm.debug.egl.port
  4. Para Valor, escriba el número de puerto

Invocar el depurador EGL desde el código generado

Puede invocar el depurador EGL desde una envoltura o programa Java generado por EGL para que pueda utilizar el depurador EGL cuando trabaje en una aplicación desplegada parcialmente. El programa necesita una sentencia call que se puede asociar con un componente de opciones de enlace, elemento callLink. De forma similar, debe asociar la envoltura con un elemento callLink. En cualquiera de los casos, el elemento debe especificar la propiedad removeComType como DEBUG.

Se aplican normas diferentes en función de si el programa que debe depurarse se ejecuta en J2EE o no:
  • Cuando el programa llamado no se ejecuta en J2EE, su llamador puede ejecutarse en cualquier sitio, inclusive en un sistema remoto.

    Antes de que se ejecute la sentencia call, debe iniciar un programa escucha que se ejecuta en Eclipse. Se inicia un escucha utilizando una configuración de lanzamiento del escucha EGL que sólo tiene un valor configurable, un número de puerto. El número de puerto por omisión es 8346.

    Para especificar un número de puerto distinto, haga lo siguiente:
    1. En el menú Ejecutar, pulse en Depurar
    2. Cuando se visualice el diálogo Depurar, seleccione Escucha EGL
    3. Pulse en Nuevo

    Debe especificar un puerto si varios escuchas EGL se ejecutan al mismo tiempo, ya que cada escucha EGL necesita su propio puerto. También debe especificar un puerto si otra aplicación utiliza el puerto 8346 o si un cortafuegos impide utilizar el puerto 8346.

    El puerto de escucha es distinto del puerto del depurador EGL, que se especifica como una preferencia EGL.

  • Cuando el programa que debe depurarse se ejecuta en J2EE, debe ejecutarse en el mismo servidor J2EE que su llamador. Los archivos jar del depurador EGL deben haberse añadido al servidor y el servidor debe ejecutarse en modalidad de depuración.

Recomendaciones

Mientras prepara el trabajo con el depurador EGL, tenga en cuenta las siguientes recomendaciones (la mayoría de las cuales presuponen que la variable de sistema sysVar.systemType está establecida en DEBUG cuando se depura el código):
  • Si el código incluye una sentencia transfer que debe ejecutarse en CICS para z/OS, escriba una sentencia condicional para utilizar un nombre de programa durante la depuración pero utilizar un ID de transacción durante la ejecución, como en el siguiente ejemplo:
      if (systemType is zoscics)
        transferName = "FQ3R";
      else // cuando systemType es debug
        transferName = "myProgram";
      end
      transfer to transaction transferName;
  • Si está recuperando una fecha de una base de datos pero espera que el código de ejecución recupere dicha fecha en un formato distinto de ISO, escriba una función para convertir la fecha, pero invoque la función sólo cuando el tipo de sistema sea DEBUG. El formato ISO es aaaa-mm-dd, que es el único que está disponible en el depurador.
  • Para especificar clases Java externas que se utilizarán cuando se ejecute el depurador, modifique la vía de acceso de clases, como se describe en la sección Establecer las preferencias del depurador EGL. Es posible que necesite clases adicionales para dar soporte, por ejemplo, a MQSeries, controladores JDBC o funciones de acceso Java.
  • Cuando depure una función de manejador de páginas que ha sido invocada por JSF (y no por otra función EGL), utilice Run para salir de la función en lugar de Step Over, Step Into o Step Return. La utilización de cualquiera de los tres mandatos Step le lleva al código Java generado del manejador de páginas, que no es útil cuando se depura EGL. Si utiliza uno de los mandatos Step, utilice Run para salir del código Java generado y visualizar la página Web en un navegador.
  • Si utiliza la opción SQL WITH HOLD (o la opción equivalente de EGL), debe saber que la opción WITH HOLD no está disponible para Java generado por EGL ni en el depurador EGL. Puede evitar esta limitación, en parte colocando sentencias commit dentro de una sentencia condicional que sólo se invoca durante la ejecución, como en el siguiente ejemplo:
      if (systemType not debug)
        sysLib.commit();
      end
Si los programas EGL se depuran en el servidor J2EE o mediante un escucha EGL, el servidor o el escucha EGL deben configurarse para indicar el número correspondiente al puerto del depurador EGL:
  • Para configurar un servidor J2EE, edite la configuración del servidor:
    1. Vaya a la pestaña Entorno, sección Propiedades del sistema
    2. Pulse Añadir
    3. En el campo Nombre, escriba com.ibm.debug.egl.port
    4. En el campo Valor, escriba el nuevo número de puerto
  • Para configurar un escucha EGL, edite la configuración de lanzamiento del escucha EGL:
    1. Vaya a la pestaña Argumentos
    2. En el campo Argumentos de VM, escriba lo siguiente:
        -Dcom.ibm.debug.egl.port=númeroPuerto
      númeroPuerto
      El nuevo número de puerto

Conceptos relacionados
Compatibilidad con VisualAge Generator

Soporte de VSAM

Condiciones de uso | Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.