web-dev-qa-db-fra.com

Comment déboguez-vous Java Applets?

Actuellement, la seule information dont je dispose est un message d'erreur d'une ligne dans la barre d'état du navigateur.

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

55
zimbatm

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

Edit: peut-être un meilleur moyen d'obtenir des traces de pile 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 Groupe principal. ac signifie comptage 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 threads enfants actifs d'un groupe de threads. pri représente la priorité; c'est la priorité d'un groupe de threads. Après Group main, les autres groupes de threads seront affichés en tant que Group, où name est l'URL associée à une applet. Les listes individuelles de threads afficheront le nom du thread, sa priorité, vivant si le thread est vivant ou détruit si le thread est en train d'être détruit, et démon si le thread est un thread démon.

L'autre commande que j'ai utilisée le plus souvent à partir de 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 - désactivé
  • 1 - basique
  • 2 - réseau, cache et basique
  • 3 - sécurité, réseau et basique
  • 4 - extension, sécurité, réseau et base
  • 5 - LiveConnect, extension, sécurité, réseau, temporaire et basique

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

26
Bob Cross

Mis à part l'utilisation évidente de la console Java et de la visionneuse d'applets, à partir de Java 6 mise à jour 7, vous pouvez utiliser la VisualVM = fourni avec le JDK (JDK_HOME/bin/visualvm). Il vous permet de visualiser les traces de pile de chaque thread et même de visualiser toutes les instances d'objet.

AppletViewer est très pratique, vous pouvez faire un "Exécuter en tant que/Java Applet" d'Eclipse pour l'exécuter, ou "Déboguer en tant que/Java Applet" pour déboguer votre classes d'applet.

Cependant, parfois pour déboguer certaines choses liées à la sécurité, l'environnement du plugin du navigateur est tout simplement trop différent d'Appletviewer. Voici ce que vous pouvez faire pour déboguer efficacement les applets dans le navigateur:

1) Obtenez des informations de débogage pour les binaires

Sauvegardez les fichiers .jar à partir de JRE_HOME/lib

(Téléchargez 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 à l'intérieur du JDK ont été compilés avec les informations de débogage incluses (informations sur le 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 dans votre débogueur.

2) Activez le débogage pour le Java

Accédez au Java Panneau de configuration/Java/Java Paramètres d'exécution/Affichage/Utilisateur/Paramètres d'exécution)

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

-Djava.compiler=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, écrivez-le pour plus tard) et la suspension - si vous devez déboguer le démarrage de l'applet, le chargement de classe, etc., définissez-le sur "y" . De cette façon, lorsque vous accédez à une page d'applet, le navigateur semble se figer car la JVM est immédiatement suspendue en attendant qu'un débogueur se connecte.

3) Utilisez votre favori IDE pour déboguer à distance le Java Plug-in

Dans Eclipse, par exemple, choisissez Run/Debug Configurations .../Remote Java Application

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 inclure le src.Zip dans votre JDK sur l'onglet sources pour avoir les sources de classe de base Java Java disponibles).

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

53
Sami Koivu

applet viewer prend en charge les options de débogage.

3
Brian Agnew

Les traces de pile des exceptions non capturées apparaîtront sur la console. Cela peut être activé depuis le Java (Avancé> Java> Afficher la console)) ou certains navigateurs ont diverses options ou plugins pour l'activer.

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

Le meilleur moyen est peut-être de ne pas déboguer du tout. Écrivez des tests. Écrivez du code qui ne se couple pas à des hypothèses inutiles - par exemple, que vous exécutez en tant qu'applet. Malheureusement, la plupart des exemples de code GUI/applet sont très mal écrits.

3

Les exceptions non intercepté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 sur l'icône Java dans la barre d'état système et en ouvrant la console (notez que cela est différent pour la machine virtuelle de 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 paramètres pour l'applet, vous devrez le configurer.) Ensuite, vous pouvez parcourir le code de l'applet comme vous débogueriez tout autre code Java Java.

1
Pool

J'ai rencontré un problème lors du débogage d'applet à distance, chaque fois que j'essayais de me connecter à partir d'Eclipse, son erreur de connexion refusée, ma version jre était de 64 bits et Eclipse 32 bits, lorsque j'ai remplacé par du jre 32 bits, cela a fonctionné pour moi. De plus, si nous avons installé les versions jre 32 bits et 64 bits, IE par défaut utilise jre 64 bits pour les applets, chrome et FF peut utiliser Versions jre 32 bits.

1
ranjeetcao

Pour moi, l'action la plus importante pour obtenir le débogage d'applet dans Eclipse est de définir dans Java (onglet Java) les bons fichiers binaires à utiliser, qui ont des symboles de débogage. Seul JRE inclus dans jdk a Donc, pour déboguer l'applet dans Java, onglet Java, appuyez sur le bouton Afficher, après avoir trouvé le bon jre dans le dossier jdk, pour moi par exemple "C:\Programmi\Java\jdk1 .7.0_03\jre ", et mettez le chèque activé uniquement pour cette entrée. C'est pour moi la meilleure façon de faire ce que dit Sami Koivu.

1
scotchwisky