Domanda

Ho un'applicazione Java in esecuzione sulla macchina Linux. Eseguo l'applicazione Java utilizzando il seguente:

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

Ho aperto la porta 4000 per TCP sulla macchina Linux. Io uso Eclipse dalla macchina Windows XP e provo a collegarmi a questa applicazione. Ho aperto la porta in Windows anche.

Entrambe le macchine sono sulla LAN, ma io non riesco a collegare il debugger per l'applicazione Java. Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Modifica Ho notato che alcune persone stanno tagliando e incollando l'invocazione qui. La risposta che ho dato in origine era rilevante solo per l'OP. Ecco uno stile più moderno invocazione (compreso utilizzando la porta più convenzionale del 8000):

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

risposta originale segue.


Prova questo:

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

Due punti qui:

  1. Non ci sono spazi nella possibilità runjdwp.
  2. Opzioni vengono prima il nome della classe. Qualsiasi argomento si hanno dopo il nome della classe sono argomenti per il vostro programma!

Altri suggerimenti

Per JDK 1.3 o versioni precedenti:

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

Per JDK 1.4

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

Per più recente JDK:

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

Si prega di cambiare il numero di porta in base alle vostre esigenze.

note tecniche java

  

Da 5.0 in poi la -agentlib: JDWP opzione viene utilizzata per caricare e specificare   opzioni per l'agente JDWP. Per le versioni precedenti alla 5.0, il -Xdebug e   opzioni -Xrunjdwp vengono utilizzati (l'attuazione 5.0 supporta anche le opzioni -Xdebug e -Xrunjdwp ma il più recente -agentlib: opzione JDWP è preferibile in quanto l'agente JDWP in 5.0 utilizza l'interfaccia JVM TI al   VM piuttosto che l'interfaccia JVMDI più vecchio)

Una cosa da notare, da JVM strumento di documentazione di interfaccia :

  

JVM TI è stato introdotto in JDK 5.0. JVM TI sostituisce la Java Virtual Machine Interface Profiler (JVMPI) e la Java Virtual Machine Debug Interface (JVMDI), che, a partire dal JDK 6, non sono più forniti.

Passi:

  1. Avviare l'applicazione Java remoto con opzioni di debug, come detto nel post sopra.
  2. Configurare Eclipse per il debug remoto specificando host e la porta.
  3. Avvia debug remoto in Eclipse e aspettare per il collegamento ad avere successo.
  4. punto di interruzione di installazione ed eseguire il debug.
  5. Se si desidera eseguire il debug, dall'inizio di usare l'applicazione sospendere = y, ciò manterrà un'applicazione remota sospesa fino a quando ci si connette da Eclipse.

guida passo passo su Java remota debug per tutti i dettagli.

Risposta copre Java> = 9:

Per Java 9+, l'opzione JVM ha bisogno di un leggero cambiamento anteponendo l'indirizzo con l'indirizzo IP del computer che ospita la JVM, o semplicemente *:

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

Ciò è dovuto ad un cambiamento tale informazione nella https://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435 .

Per Java <9, il numero di porta è sufficiente per la connessione.

In questo modo è necessario impostare Eclipse debugger per il debug remoto:

Impostazioni Eclipse:

1.Click the Run pulsante
2.Select le configurazioni di debug
3.Selezionare la
“Java Remote Application” Configurazione 4.New

  • Nome: GatewayPortalProject
  • Progetto: GatewayPortal-portlet
  • Tipo di connessione: presa Fissare
  • Proprietà di connessione: i) localhost ii) 8787

Per JBoss:

1.Cambia il /path/toJboss/jboss-eap-6.1/bin/standalone.conf nel vostro VM come segue:    Rimuovere il commento dalla seguente riga rimuovendo il #:

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

Per Tomcat:

Nel catalina.bat file:

Passaggio 1:

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

Passaggio 2:

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

Passaggio 3: Eseguire Tomcat dal prompt dei comandi come di seguito:

catalina.sh jpda start

Quindi è necessario impostare i punti di interruzione nelle classi Java che desiderate eseguire il debug.

mi piacerebbe sottolineare che ordine degli argomenti è importante .

Per me comando java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar apre la porta debugger ,

, ma il comando java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 non .

L'opzione migliore di debug è quello di creare log e analizzare i log. Ma in alcuni casi, abbiamo bisogno di applicazioni web debug distribuito su server.

Vedere in remoto eseguire il debug di un collegamento applicazione Java web. flusso completo di debug remoto è descritto qui. Spero che sarà di aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top