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: