Normalement, pour attacher un débogueur à un jvm en cours d'exécution, vous devez démarrer le jvm avec des arguments tels que les suivants:
> 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 débogage, que puis-je faire?
Cette situation se produit lorsqu'un système de production (c'est-à-dire démarré sans arguments de débogage) présente un bogue `` aléatoire '' (j'utilise le terme librement). Je ne peux donc pas redémarrer le jvm avec les arguments appropriés, car personne ne sait comment reproduire le bogue. Est-il impossible de se connecter à la JVM dans cette situation?
Juste pour clarifier, il n'est pas possible d'utiliser des outils comme jdb pour attacher à des JVM déjà en cours d'exécution à moins qu'elles n'aient été démarrées en mode débogage
à partir de la page de manuel JVM
ne autre façon d'utiliser jdb est de l'attacher à un Java VM qui est déjà en cours d'exécution. A VM = qui doit être débogué avec jdb doit être démarré avec les options suivantes:
Vous pourrez peut-être utiliser jsadebugd ( JDK ) pour attacher un serveur de débogage au processus (disponible sur Windows avec le - Outils de débogage pour Windows ). Il est marqué comme expérimental, vous pouvez donc d'abord l'essayer sur une machine de test.
Usage:
jsadebugd <pid>
jdb -connect Sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost
Le nom du connecteur avec l'argument peut être trouvé à l'aide de jdb -listconnectors
.
Juste pour clarifier, il n'est pas possible d'utiliser des outils comme jdb pour attacher à des JVM déjà en cours d'exécution>> à moins qu'elles n'aient été démarrées en mode débogage
en russie soviétique source vous lit
jdb -connect Sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426
VisualVM n'est pas un débogueur, mais vous pouvez en obtenir des vidages de threads et des vidages de tas qui peuvent être utiles pour diagnostiquer certains problèmes. Les fonctionnalités les plus utiles nécessitent JVM 5 ou 6.
utiliser jstack (utile en cas de blocages) ou le plugin btrace VisualVM pourrait aussi faire l'affaire