Resolución de Errores en Programas Java
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
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
.
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.
Want to help? Learn how to contribute to Fedora Docs ›