Question

J'ai une application java en cours d'exécution sur la machine linux. Je lance l'application java en utilisant les éléments suivants:

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

J'ai ouvert le port 4000 TCP sur cette machine Linux. J'utilise éclipse de la machine Windows XP et essayez de vous connecter à cette application. J'ai ouvert le port dans les fenêtres aussi.

Les deux machines sont sur le réseau local, mais je ne peux pas sembler connecter le débogueur à l'application Java. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Modifier J'ai remarqué que certaines personnes sont couper et coller l'invocation ici. La réponse que je donnais à l'origine était pertinente pour l'OP que. Voici un style d'appel plus moderne (y compris en utilisant le port plus classique de 8000):

java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>

réponse originale suit.


Essayez ceci:

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

Deux points ici:

  1. Pas d'espace dans l'option runjdwp.
  2. Les options sont avant le nom de la classe. Tous les arguments que vous avez après le nom de classe sont des arguments à votre programme!

Autres conseils

Pour JDK 1.3 ou une version antérieure:

-Xnoagent -Djava.compiler=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 JDK plus récent:

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

S'il vous plaît changer le numéro de port en fonction de vos besoins.

De java technotes

  

A partir de 5,0 partir du -agentlib: l'option jdwp est utilisée pour charger et spécifier   options à l'agent JDWP. Pour les versions antérieures à 5.0, le -Xdebug et   les options -Xrunjdwp sont utilisées (la mise en œuvre 5.0 prend également en charge les options -Xdebug et -Xrunjdwp, mais la plus récente -agentlib: l'option jdwp est préférable que l'agent JDWP dans 5.0 utilise l'interface JVM TI au   VM plutôt que l'interface JVMDI plus)

Une autre chose à noter, à partir de JVM documentation de l'interface outil :

  

JVM TI a été introduite à JDK 5.0. JVM TI remplace l'interface Profiler machine virtuelle Java (JVMPI) et la machine virtuelle Java de débogage Interface (JVMDI) qui, de JDK 6, ne seront plus versées.

Étapes:

  1. Lancez votre application java à distance avec des options de débogage comme dit en post ci-dessus.
  2. Configurer Eclipse pour le débogage à distance en spécifiant l'hôte et le port.
  3. Lancer le débogage à distance dans Eclipse et attendez la connexion pour réussir.
  4. Configuration point d'arrêt et de débogage.
  5. Si vous voulez déboguer du début de l'utilisation de l'application suspend = y, cela permet de garder à distance l'application suspendue jusqu'à ce que vous vous connectez depuis éclipse.

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

Réponse couvrant Java> = 9:

Pour Java 9+, l'option JVM a besoin d'un léger changement en préfixant l'adresse avec l'adresse IP de la machine hébergeant la machine virtuelle Java, ou tout simplement *:

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

Ceci est dû à un changement noté dans https://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435 .

Pour Java <9, le numéro de port est suffisant pour se connecter.

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

Paramètres Eclipse:

1.Click le bouton Exécuter
2.Select les configurations de débogage
3.Sélectionnez
« application Java à distance » Configuration 4.New

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

Pour JBoss:

1.Changer la /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:

catalina.bat fichier:

Etape 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 invite de commande comme ci-dessous:

catalina.sh jpda start

Ensuite, vous devez définir breakpoints dans les classes Java que vous désirez déboguer.

Je voudrais souligner que l'ordre des arguments est important .

Pour moi commande java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar ouvre le port de débogage ,

mais la commande java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 ne pas .

La meilleure option de débogage est de créer des journaux et analyser les journaux. Mais dans certains cas, nous avons besoin de déboguer application Web déployée sur le serveur.

Voir déboguer un lien Remotely application web java . flux complet de débogage à distance est décrite ici. Espérons que cela vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top