Depurador de EGL

Cuando esté en el entorno de trabajo, el depurador de 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.

Mandatos del depurador

Utilice los siguientes mandatos para interactuar con el depurador de 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 de EGL. Se detiene en la siguiente sentencia del programa actual si el programa llamado se ejecuta fuera del depurador de EGL.

El depurador de 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 PageHandler, 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 de 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 de 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 depurador de 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 PageHandler, 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 de 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 de 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 depurador de 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 de EGL ejecuta la siguiente sentencia y se interrumpe.

El depurador de 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 de 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 PageHandler, el depurador de 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 de 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 de 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 de 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 de 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 de 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.

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 de 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.

El ID de usuario y la contraseña utilizados para acceder a una base de datos SQL están separados del ID de usuario y la contraseña utilizados para efectuar llamadas remotas durante la depuración. Para establecer el ID de usuario y la contraseña para llamadas remotas durante la depuración, consulte la sección Establecer las preferencias del depurador de EGL.

Sentencia call

Como se ha indicado antes, el depurador de EGL responde a una sentencia transfer o show interpretando el código fuente EGL. Sin embargo, el depurador de 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 de 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.
En ausencia de información de enlace, el depurador de 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 de 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 de EGL

El depurador de 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 de EGL.

Si se especifica un valor que no sea 8345 como puerto de depurador de 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

Recomendaciones

Mientras prepara el trabajo con el depurador de 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 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 de 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 PageHandler 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 PageHandler, 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 de 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 de 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
Opciones de codificación de caracteres para el depurador EGL
Soporte de VSAM

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.