Comment faire du debug "pas à pas" à partir d'un serveur Tomcat distant?
Surement pas une découverte pour certains d'entre vous, je me suis longtemps demandé si il était possible de faire du debug "pas à pas" à partir d'un serveur Tomcat distant.
Ce qu'il semble logique de faire :
En toute logique, on irai dans la configuration d'un nouveau serveur qui au lieu d'être local serait distant :
Sauf que... Tomcat ne permet pas de faire ceci... enfin pas de cette façon. "The currently selected server type does not support remote hosts"
Ce qu'il faut faire pour que ça fonctionne :
Configuration du serveur
En premier lieu il faut configurer l'instance distante pour être pilotée. Pour cela il faut modifier les options de démarrage du serveur :
Dans une configuration de base de Tomcat, on modifie le script de démarrage :
$ sudo nano /etc/init.d/tomcat
Ajouter les éléments suivants à JAVA_OPTS :
-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
Attention au numéro de port indiqué, il faut qu'il soit accessible à partir du poste de dev.
NE PAS OUBLIER D'ENLEVER CETTE LIGNE PAR LA SUITE (Surtout si le serveur piloté est en PROD!)
Ensuite, redémarrer tomcat :
$ sudo /etc/init.d/tomcat stop
$ sudo /etc/init.d/tomcat start
Configuration du client
Aller dans le menu "Run > Debug Configuration" :
Créer une nouvelle configuration "Remote Java Application", en configurant l'adresse et le port du serveur : (Dommage qu'on ne puisse pas le configurer derrière une commande ssh). Dans l'onglet "source", qui devrait déjà contenir votre dossier source, il n'y a rien à faire sauf config particulière.
Ensuite lancer la connection avec "Debug".
Il semble ne rien se passer, mais si nous définissons un point d'arrêt dans l'application et que l'on déclenche le passage dans ce code nous obtenons le résultat attendu : on passe en debug "pas à pas".
Résultat
Ici on voit qu'on est en debug sur le serveur local et sur le serveur distant qui lui est arrêté sur un point d'arrêt :