1.0 Introducción
2.0 Problemas conocidos
2.1 Entorno de desarrollo Web
2.2 Depuración de
WebSphere Application Server
2.3 Depurador de JavaScript
2.4 Depurador de procedimientos almacenados SQL
2.5 Herramientas de prueba y despliegue (Server Tools)
2.6 El depurador de las herramientas de
desarrollo Java (JDT)
2.7 Limitaciones de los idiomas nacionales
2.8 Depurador de
procedimientos almacenados SQL (Linux)
2.9 Depurador de SQLJ
Los depuradores de WebSphere Studio proporcionan las herramientas necesarias para depurar aplicaciones Web, JavaScript del lado del servidor, Java, SQLJ, procedimientos almacenados SQL y lenguajes compilados. En este archivo readme se describen los problemas conocidos y las limitaciones que están asociadas a los depuradores de WebSphere Studio.
Depuración de JSP:
- Los archivos JSP pueden depurarse al probarlos en un WebSphere Application Server. Si realiza la prueba en un servidor Tomcat, el depurador no se detendrá en los puntos de interrupción de JSP.
- Pueden establecerse puntos de interrupción en los archivos JSP dentro de los códigos siguientes:
- Scriptlets JSP con la forma: <% %>
- Expresiones JSP con la forma: <%= %>
- Declaraciones JSP con la forma: <%! %>
- Códigos jsp:useBean, jsp:getProperty y jsp:setProperty
- Códigos personalizados
- No pueden establecerse puntos de interrupción para los siguientes conjuntos de códigos:
- Código HTML
- Directivas JSP
- Los demás códigos JSP estándar (jsp:include, jsp:forward, etcétera)
- Si se propone migrar un área de trabajo de una versión más antigua de WebSphere Studio a esta versión, tendrá que suprimir los puntos de interrupción JSP ya establecidos y crearlos de nuevo.
- La modalidad de depuración paso a paso fallará para los métodos iniciales de EJB: si utiliza el adaptador de depuración de WebSphere Application Server para lanzar una sesión de depuración, la modalidad de depuración no se detendrá para los métodos iniciales de EJB. Utilice puntos de interrupción si desea depurar estos métodos.
- La acción de recorrer hasta retorno desde Java para volver a JavaScript no está soportada: utilice puntos de interrupción si desea poder regresar al código JavaScript desde Java.
- Depurar archivos JSP:
- La depuración paso a paso no funcionará para los archivos JSP que no contengan código ejecutable.
- Si utiliza el adaptador de depuración de WebSphere Application Server para lanzar una sesión de depuración, no podrá inspeccionar ni visualizar variables y expresiones de JSP.
- La acción de ejecutar hasta la línea no está soportada en los archivos JSP.
- El proceso de establecer puntos de interrupción JSP puede ser lento. Si tiene muchos puntos de interrupción de JSP, debe proporcionar tiempo adicional para que el depurador se inicialice.
- Los puntos de interrupción en las variables estáticas de los bloques de declaración de JSP no funcionarán y podrían provocar otros problemas relacionados con los puntos de interrupción.
- Las propiedades de punto de interrupción tales como la cuenta de aciertos, la condición, la hebra seleccionada y la política de suspensión de VM no están soportadas para los puntos de interrupción de JSP.
- No establecer puntos de interrupción Java en el editor del depurador: los puntos de interrupción Java se deben establecer en el editor de Java, no en el editor del depurador.
- Utilizar el elemento de menú emergente Cambiar archivo fuente, en la vista Depurar: si cambia el archivo fuente que se visualiza mediante el elemento de menú emergente Cambiar archivo fuente en el marco de la pila, puede ocurrir que el nuevo archivo no se abra en el editor. Para evitar que se produzca este problema, pulse otro marco de la pila y después vuelva a pulsar el marco original de la pila. Ahora el archivo nuevo se abrirá en el editor.
- Consola de depuración: en la consola de depuración, los hiperenlaces para abrir tipos no funcionarán.
- Etiquetas de marco de pila después de intercambio dinámico: Si después de una sustitución dinámica de código algunos de los marcos de pila tienen etiquetas como, por ejemplo,
<tipo receptor desconocido>(<tipo declarante desconocido>).<nombre de método desconocido>(<argumentos desconocidos>) línea: no disponible <número de línea desconocido>puede obtener las etiquetas correctas pasando a otra perspectiva y luego volviendo a la perspectiva Depurar.
- Un objeto JavaScript no está disponible para examen hasta que se haya completado su constructor: puede recorrer paso a paso la ejecución del constructor, pero no puede examinar el objeto que se está construyendo hasta que la construcción haya finalizado (ha salido del constructor).
- Las acciones de recorrer y los marcos que no sean el superior de la pila: en JavaScript no están soportadas las acciones de recorrer principal y recorrer hasta retorno en un marco que no sea el superior de la pila.
- include de JSP: no se puede depurar JavaScript en un include de JSP.
- Recorrer hasta salir de funciones recursivas: los usuarios que depuran funciones JavaScript recursivas se encontrarán con que, cuando recorren hasta salir de una función recursiva, regresan al nivel de ejecución superior.
- No expandir objetos que contengan variables writer o inputStream: al examinar objetos de JavaScript, se advierte a los usuarios de que no deben expandir objetos que contengan las variables writer o inputStream. Ello haría que el depurador dejara de responder.
- Entorno de prueba: la depuración de JavaScript no funcionará cuando se utilice el entorno de prueba WebSphere V5. Este problema se arregla con el APAR número PQ73036.
- Importar o suprimir una base de datos en la vista Definición de datos puede provocar la pérdida de puntos de interrupción establecidos: si depura un procedimiento almacenado SQL antes de importar la base de datos a una carpeta en la vista Definición de datos y después importa la base de datos, se perderán los puntos de interrupción de línea que haya creado. Cuando haya importado la base de datos, el depurador utilizará esa carpeta para ver el origen. Si suprime la información de la base de datos importada, la próxima vez que intente depurar un procedimiento almacenado SQL también perderá la información de punto de interrupción. Con esto no se restaurarán los puntos de interrupción perdidos al importar la base de datos por primera vez.
A fin de evitar este problema, le aconsejamos que importe la base de datos antes de depurar un procedimiento almacenado.
- No está soportada la depuración de procedimientos almacenados Java: el editor le permite añadir puntos de interrupción al código fuente de un procedimiento almacenado Java. Sin embargo, estos puntos de interrupción se pasan por alto porque la depuración de procedimientos almacenados Java aún no está soportada.
- Nombres de procedimiento almacenado delimitados: el depurador de procedimientos almacenados SQL proporciona soporte limitado para procedimientos almacenados con nombres de procedimiento o esquema delimitados. Tales procedimientos deben lanzarse desde el diálogo Configuraciones de lanzamiento, y no desde el menú de contexto de la vista Definición de datos.
- Soporte para tener abiertas a la vez varias sesiones activas del depurador de procedimientos almacenados SQL: en la versión 5.0 de este producto, no se podía tener abierta más de una sesión activa del depurador de procedimientos almacenados SQL en un momento dado. Esta restricción ya no existe en la versión 5.0.1 de este producto ni en las versiones superiores.
- Procedimientos almacenados con argumentos FOR BIT DATA: los procedimientos almacenados que tienen argumentos con el atributo FOR BIT DATA no se pueden depurar con el depurador de procedimientos almacenados SQL de WebSphere Studio.
- La configuración de lanzamiento creada en el producto de disponibilidad anticipada puede no reconocerse en el producto actual: si instaló la versión de disponibilidad anticipada de este producto y creó una configuración de lanzamiento del depurador de procedimientos almacenados, es posible que no se reconozcan los valores de configuración de lanzamiento al utilizarlos con la versión actual de este producto. Los valores de configuración de lanzamiento que se guardaron en la versión Disponibilidad anticipada pueden volver a ser valores por omisión al abrirlos en la versión actual del producto.
Tenga en cuenta las siguientes consideraciones al decidir que va ejecutar un servidor en modalidad de depuración:
- Los servidores pueden iniciarse y ejecutarse con mayor lentitud que si se ejecutan en modalidad de no depuración.
- WebSphere Application Server tarda un tiempo significativamente mayor en compilar páginas JSP.
La información sobre los problemas conocidos y las limitaciones de las herramientas de desarrollo Java (JDT) está disponible en las notas de release de las herramientas de desarrollo Java (JDT) y en las notas de release del entorno de trabajo (IDE). Se accede a ellas desde el archivo readme principal del producto, que se instala junto con este producto.
- Limitación de bidireccional (BiDi): no podrá utilizar el editor del depurador al depurar archivos JSP que se hayan codificado en una página de códigos que no sea la nativa.
- Depurador de lenguajes compilados:
- En los sistemas de un solo byte (SBCS), el depurador de lenguajes compilados no soporta los nombres de programa que contengan caracteres por encima de 0x7F ni que se pasen parámetros de programa que contengan dichos caracteres.
- No se pueden utilizar caracteres NL en los nombres ni en los argumentos del objeto de depuración.
Si depura un procedimiento almacenado SQL en una base de datos local, es posible que reciba el mensaje de error número SQL1224N:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N No se ha podido iniciar un agente de base de datos para atender una petición, o bien el agente ha terminado como resultado de un cierre del sistema de base de datos o de un mandato de forzar. SLSTATE=55032
Esto se debe a un problema del kernel de Linux (Linux kernel Bugzilla error número 351). Para salir al paso de este problema, se dan las siguientes instrucciones, que utilizan el método de conexión TCPIP de DB2 (como bucle de retorno), en lugar de la interfaz a nivel de llamada (CLI). Este procedimiento permitirá al depurador utilizar el mismo alias de base de datos que antes:
- Si no se ha configurado un puerto para los clientes remotos de DB2, cree un puerto TCP/IP en /etc/services, (por ejemplo, db2cdb2inst1 50000/tcp # DB2 connection service port). Puede utilizarse un puerto existente para los clientes remotos de DB2.
Para los pasos del 2 al 7, a continuación, debe iniciar sesión como propietario de la instancia de DB2.
- Configure el gestor de bases de datos para que inicie el gestor de conexiones del protocolo de comunicaciones TCP/IP. Si no está seguro de si esto ya se ha realizado, emita el mandato:
db2set db2commSi la salida no contiene la palabra clave tcpip, tendrá que entrar el siguiente mandato con el fin de actualizar la variable de registro db2comm para que incluya tcpip:
db2set db2comm=<nombres de protocolos existentes>,tcpipLa variable de registro db2comm determina qué gestor de conexiones de protocolo se habilitará al iniciarse el gestor de bases de datos. Puede establecer esta variable para múltiples protocolos de comunicaciones separando las palabras clave con comas; por ejemplo, db2set db2comm=tcpip,appc.
Tendrá que volver a emitir el mandato db2start para iniciar los gestores de conexiones de los protocolos especificados en el parámetro de registro db2comm. Dado que reiniciaremos DB2 en el paso 7 que figura a continuación, no hace falta hacerlo ahora
.- Actualice el parámetro de configuración de gestor de bases de datos SVCENAME con el nombre de servicio de conexión definido en /etc/services (paso 1).
Para obtener el valor actual de SVCENAME, entre el mandato:
db2 get dbm cfg | grep -i svcenameSi tiene que actualizar el valor de SVCENAME, entre el mandato:
db2 update dbm cfg using svcename <nombre de servicio de conexión>Aquí, <nombre de servicio de conexión> es una serie sensible a las mayúsculas/minúsculas y debe coincidir con el nombre del puerto de servicio que colocó en /etc/services (por ejemplo, db2 update dbm cfg using svcename db2cdb2inst1).
La actualización de la configuración del gestor de bases de datos no entrará en vigor hasta que se emita el siguiente mandato db2start. Lo haremos en el paso 7, a continuación.
- Catalogue el nodo del bucle de retorno entrando el mandato:
db2 catalog tcpip node <nombre de nodo> remote 127.0.0.1 server <nombre de servicio de conexión>Aquí, <nombre de nodo> es un alias local del nodo que se catalogará. Es un nombre arbitrario de la estación de trabajo, que se utiliza para identificar el nodo (por ejemplo, db2 catalog tcpip node minodo remote 127.0.0.1 server db2cdb2inst1).
Para verificar que el mandato catalog ha funcionado como es debido, emita el mandato:
db2 list node directoryA continuación figura una salida de ejemplo de este mandato (aunque se han eliminado las líneas en blanco por cuestión de legibilidad):
Directorio de nodo
Número de entradas en el directorio = 1
Entrada de nodo 1:
Nombre de nodo = MINODO
Comentario =
Protocolo = TCPIP
Nombre sistpral = 127.0.0.1
Nombre de servicio = db2cdb2inst1- Catalogue la base de datos como se indica a continuación. Si desea seguir la pista del efecto de cada mandato, vea los mandatos que se dan a continuación para generar la salida de ejemplo:
- db2 catalog db <nombre de base de datos> as <alias de base de datos>
- db2 uncatalog db <nombre de base de datos>
- db2 catalog db <alias de base de datos as <nombre de base de datos> at node <nombre de nodo>
Por ejemplo,
db2 catalog db WAS as WASLOOP
db2 uncatalog db WAS
db2 catalog db WASLOOP as WAS at node MINODONotas:
- El alias de la base de datos puede ser el nombre que desee, pero no puede coincidir con el nombre de la base de datos.
- Recibirá el mensaje de error número SQL1334N si no ha catalogado correctamente la base de datos.
- Tendrá que repetir los pasos del 5a al 5c para cada base de datos en la que desee depurar un procedimiento almacenado.
Salida de ejemplo para los pasos del 5a al 5c
Antes del paso 5a, ya se ha creado una base de datos local que se llama WAS. El mandato db2 list db directory tiene la siguiente salida:
Directorio de base de datos del sistema
Número de entradas en el directorio = 1
Entrada de base de datos 1:
Alias de base de datos = WAS
Nombre de base de datos = WAS
Directorio de base de datos local = /home/ctsui
Nivel de release de la base de datos = 9.00
Comentario =
Tipo de entrada de directorio = Indirecta
Número de nodo de catálogo = 0Después del paso 5a, la salida del mandato db2 list db directory sería:
Directorio de base de datos del sistema
Número de entradas en el directorio = 2
Entrada de base de datos 1:
Alias de base de datos = WAS
Nombre de base de datos = WAS
Directorio de base de datos local = /home/ctsui
Nivel de release de la base de datos = 9.00
Comentario =
Tipo de entrada de directorio = Indirecta
Número de nodo de catálogo = 0
Entrada de base de datos 2:
Alias de base de datos = WASLOOP
Nombre de base de datos = WAS
Directorio de base de datos local = /home/ctsui
Nivel de release de la base de datos = 9.00
Comentario =
Tipo de entrada de directorio = Indirecta
Número de nodo de catálogo = 0Después del paso 5b, la salida del mandato db2 list db directory sería:
Directorio de base de datos del sistema
Número de entradas en el directorio = 1
Entrada de base de datos 1:
Alias de base de datos = WASLOOP
Nombre de base de datos = WAS
Directorio de base de datos local = /home/ctsui
Nivel de release de la base de datos = 9.00
Comentario =
Tipo de entrada de directorio = Indirecta
Número de nodo de catálogo = 0Después del paso 5c, la salida del mandato db2 list db directory sería:
Directorio de base de datos del sistema
Número de entradas en el directorio = 2
Entrada de base de datos 1:
Alias de base de datos = WAS
Nombre de base de datos = WASLOOP
Nombre de nodo = MINODO
Nivel de release de la base de datos = 9.00
Comentario =
Tipo de entrada de directorio = Remota
Número de nodo de catálogo = -1
Entrada de base de datos 2:
Alias de base de datos = WASLOOP
Nombre de base de datos = WAS
Directorio de base de datos local = /home/ctsui
Nivel de release de la base de datos = 9.00
Comentario =
Tipo de entrada de directorio = Indirecta
Número de nodo de catálogo = 0
Para verificar que el mandato catalog db ha funcionado como es debido, emita los dos mandatos siguientes (y vea la salida de ejemplo que figura a continuación):
db2 connect to wasloop
db2 connect to wasAquí, el mandato db2 connect to wasloop debe imprimir la información de conexión, y el mandato db2 connect to was debe proporcionarle el mensaje SQL1403N.
Salida de ejemplo del mandato db2 connect to wasloop:
Información de conexión a base de datos
Directorio de base de datos del sistemaServidor de base de datos = DB2/6000 6.1.0
ID de autorización SQL = CTSUI
Alias de base de datos local = WASLOOPSalida de ejemplo del mandato db2 connect to was:
SQL1403N El nombre de usuario y/o la contraseña suministrada es incorrecta. SQLSTATE=08004- Actualice el mecanismo de autenticación para que sea Autenticación de cliente. Entre el mandato:
db2 update dbm cfg using authentication client
Para verificar que el mandato ha funcionado como es debido, visualice el nuevo valor emitiendo el mandato:
db2 get dbm cfg
Salida de ejemplo:
....
Autenticación de gestor de bases de datos (AUTHENTICATION) = CLIENT
....- Reinicie DB2 para renovar la antememoria del directorio. Por ejemplo,
db2stop
db2start- En el caso de WAS, no hace falta actualizar el archivo admin.config. En el caso de una aplicación de Websphere, no hace falta cambiar la configuración de origen de datos existente.
- Si desea desactivar la base de datos, haga lo siguiente:
- db2 attach to <nombre de nodo> user <ID de usuario> using <contraseña>
- db2 drop db <nombre de base de datos>
Por ejemplo, db2 attach to MINODO user miid using micontrsña
db2 drop db WAS
Cuando se realiza un intercambio dinámico mientras se depura con la JVM J9, si hay métodos SQLJ en la pila de llamadas, recibiría un diálogo Métodos obsoletos en la pila. Si el intercambio dinámico fue de una clase SQLJ, la clase se recargará en la JVM, pero no se verá el código nuevo que se ejecuta hasta la próxima vez que se llame a un método de la clase.
Si hace un intercambio dinámico de una clase SQLJ, los puntos de interrupción de SQLJ podrían no funcionar para esta clase durante la sesión de depuración actual.
Volver al archivo readme principal
(C) Copyright IBM Corporation 2000, 2003. Reservados todos los derechos.