100 votes

Débogage d'une application java sans le démarrage de la JVM avec des arguments de débogage

Normalement pour joindre un debuger à une jvm vous devez lancer la jvm avec des arguments tels que le suivant:

> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n

Maintenant, si je veux déboguer un processus qui n'a pas été démarré en mode de débogage, que puis-je faire?

Cette situatoin arrises lorsqu'un système de production (ie commencé sans debug args) présente un "random" (j'utilise le terme faiblement) bug. Donc je ne peux pas redémarrer la machine avec les arguments appropriés, parce que personne ne sait comment reproduire le bug de nouveau. Est-il impossible de joindre à la JVM dans cette situation?

Juste pour préciser qu'il n'est pas possibel d'utiliser des outils comme jdb à joindre à déjà en cours d'exécution Jvm, sauf s'ils ont été démarré en mode de débogage

à partir de la JVM de l'homme page

Une autre façon d'utiliser jdb est en l'attachant à une machine virtuelle Java qui est déjà en cours d'exécution. Une machine virtuelle, c'est-à-être débogage avec jdb doit être lancé avec les l'une des options suivantes:

50voto

McDowell Points 62645

Vous pouvez être en mesure d'utiliser jsadebugd (JDK) pour joindre un de débogage du serveur pour le processus (disponible sur Windows avec les Outils de Débogage pour Windows). Il est marqué comme expérimentale, de sorte que vous pouvez l'essayer sur une machine de test en premier.

Utilisation:

jsadebugd <pid>
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost

Le nom du connecteur blanc arg peut être trouvé à l'aide de jdb -listconnectors.

33voto

potted plant Points 101

Juste pour préciser qu'il n'est pas possibel d'utiliser des outils comme jdb à joindre à déjà en cours d'exécution Jvm > > sauf qu'ils ont démarré en mode de débogage

en russie soviétique source vous lit

jdb -connect soleil.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426

7voto

sk. Points 3690

VisualVM n'est pas un débogueur, mais vous pouvez obtenir thread décharges et des tas de dumps de ce qui peut être utile pour diagnostiquer certains problèmes. Les fonctionnalités les plus utiles exiger JVM 5 ou 6.

6voto

Vijay Points 113

à l'aide de jstack (utile en cas de blocages) ou le btrace VisualVM plugin pourrait également faire l'affaire

-5voto

OscarRyz Points 82553

Vous pouvez toujours utiliser jdb et de débogage à la main :P

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X