Débogage à distance d’une application Java

J’ai une application java exécutée sur une machine Linux. Je lance l’application java en utilisant ce qui suit:

java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n 

J’ai ouvert le port 4000 pour TCP sur cette machine Linux. J’utilise eclipse de la machine Windows XP et tente de me connecter à cette application. J’ai également ouvert le port dans Windows.

Les deux machines sont sur le LAN mais je n’arrive pas à connecter le débogueur à l’application Java. Qu’est-ce que je fais mal?

    Edit: J’ai remarqué que certaines personnes collent l’invocation ici. La réponse que j’ai initialement donnée était pertinente pour l’OP uniquement. Voici un style d’appel plus moderne (y compris l’utilisation du port plus conventionnel de 8000):

     java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n  

    La réponse originale suit.


    Essaye ça:

     java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp 

    Deux points ici:

    1. Aucun espace dans l’option runjdwp .
    2. Les options viennent avant le nom de la classe. Tous les arguments que vous avez après le nom de la classe sont des arguments pour votre programme!

    Pour JDK 1.3 ou version antérieure:

     -Xnoagent -Djava.comstackr=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006 

    Pour JDK 1.4

     -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006 

    Pour les nouveaux JDK:

     -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006 

    Veuillez modifier le numéro de port en fonction de vos besoins.

    Des notes techniques java

    A partir de la version 5.0, l’option -agentlib: jdwp est utilisée pour charger et spécifier les options pour l’agent JDWP. Pour les versions antérieures à la version 5.0, les options -Xdebug et -Xrunjdwp sont utilisées (l’implémentation 5.0 prend également en charge les options -Xdebug et -Xrunjdwp, mais l’option -agentlib: jdwp est préférable car l’agent JDWP 5.0 utilise l’interface JVM TI pour la machine virtuelle plutôt que l’ancienne interface JVMDI)

    Une autre chose à noter, de la documentation de l’interface de JVM Tool :

    JVM TI a été introduit chez JDK 5.0. JVM TI remplace l’interface JVMPI (Java Virtual Machine Profiler) et l’interface JVMDI (Java Virtual Machine Debug Interface) qui, à partir de JDK 6, ne sont plus fournies.

    Pas:

    1. Démarrez votre application Java distante avec les options de débogage, comme indiqué dans l’article ci-dessus.
    2. Configurez Eclipse pour le débogage à distance en spécifiant l’hôte et le port.
    3. Lancez le débogage distant dans Eclipse et attendez que la connexion réussisse.
    4. Installez le point d’arrêt et le débogage.
    5. Si vous souhaitez déboguer depuis le début de l’utilisation de l’application suspend = y, l’application distante sera suspendue jusqu’à ce que vous vous connectiez depuis eclipse.

    Voir le guide étape par étape sur le débogage Java à distance pour plus de détails.

    Voici comment configurer Eclipse Debugger pour le débogage à distance:

    Paramètres Eclipse:

    1.Cliquez sur le bouton Exécuter
    2.Sélectionnez les configurations de débogage
    3.Sélectionnez “Application Java distante”
    4. Nouvelle configuration

    • Nom: GatewayPortalProject
    • Projet: GatewayPortal-portlet
    • Type de connexion: Socket Attach
    • Propriétés de connexion: i) localhost ii) 8787

    Pour JBoss:

    Modifiez le /path/toJboss/jboss-eap-6.1/bin/standalone.conf dans votre vm comme suit: Décommentez la ligne suivante en supprimant le #:

     JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n" 

    Pour Tomcat:

    Dans le fichier catalina.bat :

    Étape 1:

     CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" 

    Étape 2:

     JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n" 

    Étape 3: Exécutez Tomcat à partir de l’invite de commande comme ci-dessous:

     catalina.sh jpda start 

    Ensuite, vous devez définir des points d’arrêt dans les classes Java que vous souhaitez déboguer.

    La meilleure option de débogage consiste à créer des journaux et à parsingr les journaux. Mais dans certains cas, nous devons déboguer une application Web déployée sur un serveur.

    Voir Débogage à distance d’un lien d’ application Web Java . Le stream complet du débogage à distance est décrit ici. J’espère que ça va aider.