Resolución de Errores en Programas Java

Ravidiip, Tuju Version unspecified Last review: 2010
Java proporciona un rango de información para resolver problemas con programas de aplicación o entorno en tiempo de ejecución, en particular las trazas de pila. Estas deberían ser adjuntadas a un informe de error.

Esta página ha sido tomada de la documentación anterior de Fedora Wiki.

Se ha limpiado para publicarla aquí en el Portal Fedora Docs, pero todavía no se ha revisado su precisión técnica.

Es probablemente

  • Contenga problemas de formato

  • Fuera de fecha

  • Necesite un poco de amor

Se agradecen mucho las revisiones de precisión técnica. Si desea ayudar, consulte el archivo README en el repositorio fuente para obtener instrucciones.

Solicitudes de extracción aceptadas en https://pagure.io/fedora-docs/quick-docs

Una vez haya corregido esta página, borre este anuncio.

Esta página es un apéndice a la página de errores Proporcionar una Traza de la Pila. La situación para obtener trazas de la pila desde el software Java es ligeramente más complicada que con la mayoría del resto del software del Proyecto, debido a las dos clases de traza de pila (Java y nativa).

Las Dos Clases de Traza de Pila de Java

Las trazas de pila producidas por libgcj (esto es producida por la máquina virtual cuando corre) cubre todas las partes del programa y librerías escritas en Java y todos los métodos JNI y CNI también – pero no el código que no sea Java llamado desde los métodos JNI o CNI. También, desafortunadamente, normalmente no proporcionan números de línea de código fuente – incluso si hay disponible información de depuración completa. Sin embargo, la buena noticia es que las trazas de la pila proporcionarán más información en gcc 4.1 – que se espera que vaya a Rawhide en tiempo para su inclusión en Fedora Core 5.

Las trazas de pila producidas por gdb – que, por convención, son llamadas "rastros" – cubren todo el código nativo (ya sea código C o código Java compilado en código máquina). Sin embargo, para código interpretado, solo muestran llamadas al intérprete pero no lo que está siendo interpretado.

De este modo, ni las trazas de pila Java ni los rastros gdb son adecuados para todas las situaciones. Algunas veces será necesario examinar las trazas de pila Java, algunas veces los rastros gdb y algunas veces ambos.

Obtener una traza de la pila Java desde un programa Java

Algunas veces, los programas Java imprimirán trazas de la pila Java cuando caen o fallan de alguna manera, bien en la ventana del terminal desde el que se están ejecutando o a un archivo de registro.

Si usted obtiene la traza de pila y obtiene más de una cláusula "Caused by:", recuerde que la última cláusula "Caused By" es la más importante. Publique siempre al menos la última cláusula "Caused By" (si la hay) cuando informe de un problema.

Detalles específicos de la aplicación:

Eclipse

Si puede acceder a Eclipse, puede ver el registro de error yendo al menú Window y después Show View → Other → PDE Runtime → Error Log. Al hacer doble click sobre un error obtendrá un desplegable con una traza de la pila, que puede ser copiada y pegada directamente en el reporte de error.

Si Eclipse falla al arrancar, ejecute eclipse -consolelog para sacar el registro a la consola. Si esto no produce nada útil, pruebe eclipse -consolelog -debug.

Tomcat

Examine todos los archivos en `/var/log/tomcat5</`y cualquier archivo de registro específico de la aplicación web que usted haya configurado.

Cuando no pueda obtener una traza de la pila Java

Si un programa Java simplemente falla sin imprimir una traza de pila – ni en la ventana del terminal o incluso en un archivo de registro en cualquier sitio - entonces: Si está compilado nativamente o si dice Aborted o Segmentation fault o Illegal instruction inmediatamente antes de salir, intente obtener una traza gdb como se describe en la siguiente sección. De lo contrario, una traza gdb probablemente no será útil, de este modo, presente el reporte de error sin una traza de la pila.

Trabajo futuro: En el próximo gcc 4.1, está planeado un controlador SIGQUIT que habilitará la generación de trazas de la pila Java bajo demanda del usuario. (Esto no puede ser usado para caídas que terminen el programa, sin embargo – solo puede ser usado para ciertos fallos que dejan el programa corriendo.)

Obtener una traza gdb desde un programa Java

Primero deberá leer la página StackTraces, hasta el punto de iniciar gdb.

Como libgcj utiliza varias señales internamente, usted necesita decirle a gdb, antes que nada, que ignore algunas de ellas, tecleando o pegando los siguientes comandos en gdb:

handle SIGHUP nostop print
handle SIGPWR nostop noprint
handle SIGXCPU nostop noprint
handle SIG32 nostop noprint
handle SIG33 nostop noprint

gdb puede ser también un poco lento en la carga de información de depuración para diversas librerías (que puede afectar drásticamente al tiempo de arranque de los programas), por lo tanto, para obtener indicaciones de progreso amigables, es posible que desee especificar también:

set verbose on

Ahora teclee run o r y continúe leyendo las instrucciones en la página StackTraces.

Ignorar "Null Pointer Exceptions" de la variedad inofensiva en gdb

Algunas veces el código genera una o más Null Pointer Exceptions que son en efecto inofensivas – o al menos, irrelevantes para el error que usted está tratando de trazar. (No todas las Null Pointer Exceptions son inofensivas o irrelevantes, pero algunas lo son.) Como gcj utiliza SIGSEGV para detectar Null Pointer Exceptions, usted también puede especificar

handle SIGSEGV nostop noprint

para decirle a gdb que ignore SIGSEGVs, o

handle SIGSEGV nostop print

para decirle a gdb que le informe de SIGSEGVs, pero por lo demás los ignore.