Comment déboguer les applets Java?

Actuellement, la seule information que je possède est un message d’erreur d’une ligne dans la barre d’état du navigateur.

Savez-vous comment je pourrais obtenir une trace de stack par exemple?

Cet article est un peu ancien mais rest pertinent (y compris une section intitulée “Comment déboguer les applets dans Java Plug-in”).

Edit: peut-être une meilleure façon d’obtenir des stacktraces est d’utiliser la console du plugin Java . Si vous appuyez sur “t” dans cette fenêtre, vous verrez ce qui suit:

Imprime tous les groupes de threads existants. Le premier groupe affiché est le groupe principal. ac représente le compte actif; c’est le nombre total de threads actifs dans un groupe de threads et ses groupes de threads enfants. agc signifie comptage de groupe actif; c’est le nombre de groupes de fils enfants actifs d’un groupe de threads. pri est synonyme de priorité; c’est la priorité d’un groupe de threads. À la suite du groupe principal, les autres groupes de fils seront affichés en tant que groupe, où nom correspond à l’URL associée à une applet. Les listes individuelles de threads afficheront le nom du thread, la priorité du thread, vivante si le thread est actif ou détruit si le thread est en train d’être détruit, et le démon si le thread est un thread de démon.

L’autre commande que j’ai utilisée le plus souvent depuis cette console est le niveau de trace de 0 à 5:

Cela définit les options de niveau de trace comme décrit dans la section suivante, Tracing and Logging.

À partir de cette page, vous verrez que les niveaux ressemblent à ceci:

  • 0 – off
  • 1 – basique
  • 2 – réseau, cache et base
  • 3 – sécurité, réseau et base
  • 4 – extension, sécurité, réseau et base
  • 5 – LiveConnect, extension, sécurité, réseau, temp et base

Ces outils peuvent tous être assez utiles, car vous essayez de découvrir ce qui est entré dans la tête de vos applets. Je sais qu’ils ont travaillé pour moi.

Outre l’utilisation évidente de la console Java et du visualiseur d’applet, à partir de Java 6, vous pouvez utiliser VisualVM fourni avec le JDK (JDK_HOME / bin / visualvm). Il vous permet de visualiser les traces de stack de chaque thread et même d’afficher toutes les instances d’object.

AppletViewer est très pratique, vous pouvez faire un “Run as / Java Applet” à partir d’Eclipse pour exécuter, ou “Debug As / Java Applet” pour déboguer vos classes d’applet.

Cependant, parfois, pour déboguer des éléments liés à la sécurité, l’environnement du plug-in de navigateur est trop différent de celui de l’appletviewer. Voici ce que vous pouvez faire pour déboguer efficacement les applets dans le navigateur:

1) Obtenir des informations de débogage pour les fichiers binarys

Sauvegardez les fichiers .jar à partir de JRE_HOME / lib

(Télécharger et) Installez un JDK pour la même version que votre JRE.

Copiez les fichiers .jar de JDK_HOME / jre / lib vers JRE_HOME / lib

Les fichiers contenus dans le JDK ont été compilés avec les informations de débogage incluses (informations de numéro de ligne du code source, noms de variables, etc.) et les fichiers JRE ne contiennent pas ces informations.

Sans cela, vous ne pourrez pas entrer de manière significative dans le code de la classe principale de votre débogueur.

2) Activer le débogage pour le plug-in Java

Accédez aux parameters du panneau de configuration Java / Java / Java Runtime Settings / View / User / Runtime

Et ajoutez les options pour activer le débogage. Quelque chose comme ça:

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

Les options intéressantes sont le port (en utilisant 2502 ici, vous pouvez utiliser à peu près n’importe quel port libre, il suffit de l’écrire pour plus tard) et le suspendre – si vous devez déboguer le démarrage de l’applet, le chargement de classe, etc. . De cette façon, lorsque vous accédez à une page d’applet, le navigateur semble se bloquer car la JVM est immédiatement suspendue en attendant qu’un débogueur se connecte.

3) Utilisez votre IDE préféré pour déboguer à distance le plug-in Java

Dans Eclipse, par exemple, choisissez Exécuter / Déboguer les configurations … / Application Java distante

Cliquez sur le bouton “Nouveau”.

Assurez-vous que le type de connexion est “Socket Attach”, choisissez localhost comme hôte si votre navigateur est local et le port que vous avez choisi précédemment (2502 dans l’exemple).

Vous devrez peut-être insérer le fichier src.zip dans votre JDK sur l’onglet Sources pour que les sources de classe Java core soient disponibles.

Enregistrez la configuration et, une fois que votre navigateur exécute le plug-in (avec ou sans JVM suspendue), exécutez le débogueur distant pour vous connecter à la machine virtuelle Java du plug-in, avec un projet contenant vos sources d’applet ouvertes.

Le visualiseur d’applet prend en charge les options de débogage.

Des traces d’emstackment provenant d’exceptions non capturées apparaîtront sur la console. Cela peut être activé à partir du panneau de configuration Java (Avancé> Console Java> Afficher la console) ou certains navigateurs ont diverses options ou plug-ins pour l’activer.

Vous pouvez attacher un débogueur au processus PlugIn en cours d’exécution.

Peut-être que le meilleur moyen est de ne pas déboguer du tout. Ecrire des tests. Ecrivez du code qui ne correspond pas à des hypothèses inutiles – par exemple, vous exécutez en tant qu’applet. Malheureusement, la plupart des exemples de code d’interface / applet sont très mal écrits.

Les exceptions non détectées sont envoyées à la console. Vous pouvez également utiliser System.out pour écrire vos propres messages sur la console. Pour afficher les résultats, vous devez ouvrir la console en cliquant avec le bouton droit de la souris sur l’icône Java dans la barre des tâches et en ouvrant la console (notez que ceci est différent pour la machine virtuelle Microsoft).

Pour déboguer correctement les applets, vous pouvez configurer Eclipse pour déboguer les applets. Cliquez avec le bouton droit sur le fichier source de l’applet et cliquez sur Déboguer en tant qu’applet. (Si vous avez des parameters pour l’applet, vous devez le configurer.) Ensuite, vous pouvez parcourir le code de l’applet comme vous le feriez avec tout autre code Java.

J’ai fait face à un problème de débogage d’applet à distance, à chaque fois que j’essayais de me connecter à eclipse, sa connexion rejetait l’erreur, ma version jre était 64 bit et eclipse 32-bit. En outre, si nous avons installé les versions jre 32 et 64 bits, IE utilise par défaut jre 64 bits pour les applets, chrome et FF peuvent utiliser les versions jre 32 bits.

Pour moi, l’action la plus importante pour obtenir le débogage d’applet dans eclipse consiste à définir dans le panneau de configuration Java (onglet java) les binarys appropriés à utiliser, qui ont des symboles de débogage. Seuls les JRE inclus dans jdk ont ​​ces symboles. Donc, pour déboguer l’applet dans le panneau de configuration java, onglet java, appuyez sur le bouton d’affichage, après avoir trouvé le jre correct sous le dossier jdk, pour moi par exemple “C: \ Programmi \ Java \ jdk1.7.0_03 \ jre” pour cette entrée C’est pour moi la façon propre de faire ce que dit Sami Koivu.