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 argument de débogage) présente un bogue «aléatoire» (j'utilise le terme vaguement). Je ne peux donc pas redémarrer le jvm avec les arguments appropriés, car personne ne sait comment reproduire à nouveau 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 se connecter à des machines virtuelles Java 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
Une autre façon d'utiliser jdb consiste à l'attacher à une machine virtuelle Java déjà en cours d'exécution. Une VM qui doit être déboguée avec jdb doit être démarrée avec les options suivantes:
la source
Réponses:
Vous pourrez peut-être utiliser jsadebugd ( JDK ) pour attacher un serveur de débogage au processus (disponible sur Windows avec les outils de débogage pour Windows ). Il est marqué comme expérimental, vous voudrez peut-être l'essayer d'abord sur une machine de test.
Usage:
Le nom du connecteur avec arg peut être trouvé en utilisant
jdb -listconnectors
.la source
jsadebugd
été remplacé parjhsdb debugd
. Alors ça devientjhsdb debugd --pid <pid>
. Voir les diapositives d'une conférence présentant jhsdb et les documents pour jhsdbSADebugServerAttachingConnector
été suppriméjdb
, et je pense que le remplacement est censé êtrejhsdb hsdb
/jhsdb clhsdb
. Je ne trouve pas de documentation sur les arguments à donnerjhsdb clhsdb
.en russie soviétique la source vous lit
la source
VisualVM n'est pas un débogueur, mais vous pouvez 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.
la source
utiliser jstack (utile en cas de blocage) ou le plugin btrace VisualVM pourrait également faire l'affaire
la source
Vous pouvez toujours utiliser jdb et déboguer manuellement: P
la source