¿Cómo se depuran los Applets de Java?

Actualmente, la única información que tengo es un mensaje de error de una línea en la barra de estado del navegador.

¿Sabes cómo podría obtener un seguimiento de stack, por ejemplo?

Este artículo es un poco antiguo, pero sigue siendo relevante (incluida una sección titulada “Cómo depurar applets en el complemento Java”).

Editar: quizás una mejor forma de obtener stacktraces es usar la consola de complementos de Java . Si presiona “t” en esa ventana, verá lo siguiente:

Imprime todos los grupos de hilos existentes. El primer grupo que se muestra es Grupo principal. ac significa recuento activo; es la cantidad total de hilos activos en un grupo de hilos y sus grupos de hilos secundarios. agc significa recuento de grupos activos; es la cantidad de grupos de hilos secundarios activos de un grupo de hilos. pri significa prioridad; es la prioridad de un grupo de hilos. A continuación del Grupo principal, otros grupos de hilos se mostrarán como Grupo, donde el nombre es la URL asociada a un applet. Las listas individuales de subprocesos mostrarán el nombre del subproceso, la prioridad del subproceso, vivo si el subproceso está vivo o destruido si el subproceso está en proceso de destrucción y el demonio si el subproceso es un subproceso de demonio.

El otro comando que he usado más a menudo desde esa consola es el nivel de rastreo de 0-5:

Esto establece las opciones de nivel de rastreo como se describe en la siguiente sección, Rastreo y registro.

Desde esa página, verá que los niveles se ven así:

  • 0 – apagado
  • 1 – básico
  • 2 – red, caché y básico
  • 3 – seguridad, red y básica
  • 4 – extensión, seguridad, red y básico
  • 5 – LiveConnect, extensión, seguridad, red, temperatura y básico

Todas estas herramientas pueden ser bastante útiles ya que estás tratando de descifrar lo que en el mundo se ha metido en la cabeza de tus applets. Sé que han trabajado para mí.

Además del uso obvio de la consola de Java y del visor de applets, a partir de la actualización 7 de Java 6, puede usar el VisualVM que viene con el JDK (JDK_HOME / bin / visualvm). Le permite ver las trazas de stack de cada subproceso e incluso ver todas las instancias de objeto.

AppletViewer es muy útil, puede ejecutar un “Ejecutar como / Java Applet” desde Eclipse para ejecutar, o “Depurar como / Java Applet” para depurar las clases de su applet.

Sin embargo, a veces para depurar algunas cuestiones relacionadas con la seguridad, el entorno del complemento del navegador es muy diferente de appletviewer. Esto es lo que puede hacer para depurar eficazmente los applets en el navegador:

1) Obtener información de depuración para los binarios

Haga una copia de seguridad de los archivos .jar de JRE_HOME / lib

(Descargar e) Instale un JDK para la misma versión que su JRE.

Copie los archivos .jar de JDK_HOME / jre / lib a JRE_HOME / lib

Los archivos dentro del JDK se comstackron con la información de depuración incluida (información del número de línea del código fuente, nombres de variables, etc.) y los archivos JRE no tienen esta información.

Sin esto, no podrás acceder de manera significativa al código de la clase principal en tu depurador.

2) Habilitar la depuración para el complemento de Java

Vaya a Java Control Panel / Java / Java Runtime Settings / View / User / Runtime Parameters

Y agregue las opciones para habilitar la depuración. Algo como esto:

-Djava.compiler=NONE -Xnoagent -Xdebug -Xrunjdwp:transport=dt_socket,address=2502,server=y,suspend=n 

Las opciones interesantes son el puerto (usando 2502 aquí, puedes usar prácticamente cualquier puerto libre, solo escríbelo para más adelante) y la suspensión: si necesitas depurar el inicio del applet, la carga de clases, etc., configura esto como “y” . De esta forma, cuando acceda a una página de applet, el navegador parecerá congelarse ya que la JVM se suspenderá inmediatamente a la espera de la conexión de un depurador.

3) Use su IDE favorito para depurar remotamente el complemento de Java

En Eclipse, por ejemplo, elija Ejecutar / Configuraciones de depuración … / Aplicación Java remota

Haga clic en el botón “Nuevo”.

Asegúrese de que el tipo de conexión sea “Socket Attach”, elija localhost como el host si su navegador es local y el puerto que eligió anteriormente (2502 en el ejemplo).

Es posible que deba incluir el src.zip en su JDK en la pestaña de fonts para tener disponibles las fonts de clase principal de Java.

Guarde la configuración y, una vez que su navegador ejecute el complemento (con la JVM suspendida o no), ejecute el depurador remoto para conectarse a la JVM del complemento, con un proyecto que contenga las fonts de su applet abiertas.

El visor de applets admite opciones de depuración.

Los rastreos de astackmiento de las excepciones no detectadas aparecerán en la consola. Esto se puede habilitar desde el Panel de control de Java (Avanzado> Consola Java> Consola de demostración) o algunos navegadores tienen varias opciones o complementos para habilitarlo.

Puede adjuntar un depurador al proceso PlugIn en ejecución.

Quizás la mejor manera es no depurar en absoluto. Escribir pruebas. Escriba un código que no se corresponda con suposiciones innecesarias, por ejemplo, que se está ejecutando como un applet. Lamentablemente, la mayoría del código de ejemplo de GUI / applet está escrito muy mal.

Las excepciones no detectadas se envían a la consola. También puede usar System.out para escribir sus propios mensajes en la consola. Para ver los resultados, deberá abrir la consola haciendo clic con el botón derecho en el icono de Java en la bandeja del sistema y abriendo la consola (tenga en cuenta que esto es diferente para la VM de Microsoft).

Para depurar los applets correctamente, puede configurar Eclipse para depurar los applets. Haga clic con el botón derecho en el archivo fuente del applet y haga clic en Depurar como applet. (Si tiene parámetros para el applet, deberá configurarlo). Luego, puede recorrer el código del applet para depurar cualquier otro código Java.

Me enfrenté al problema de la eliminación remota de applet, cada vez que intentaba conectarme desde Eclipse, sus conexiones Connection negaba error, mi versión jre era de 64 bits y eclipse 32 bits, cuando reemplacé con jre de 32 bits, funcionó para mí. Además, si instalamos las versiones jre de 32 bits y de 64 bits, IE utiliza de forma predeterminada jre de 64 bits para los applets, Chrome y FF pueden usar versiones jre de 32 bits.

Para mí, la acción más importante para obtener la depuración de applet en eclipse es establecer en el panel de control java (tab java) los binarios correctos que se usarán, que tengan símbolos de depuración. Solo JRE incluido en jdk tiene estos símbolos. Así que para depurar el applet en el panel de control de java, tab java, presione el botón de vista, luego busque la carpeta jre jdk correcta, para mí, por ejemplo, “C: \ Programmi \ Java \ jdk1.7.0_03 \ jre”, y active la verificación solo para esta entrada. Esta es para mí la manera más limpia de hacer lo que dice Sami Koivu.