debug remoto un'applicazione Java
-
13-09-2019 - |
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?
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:
- Non ci sono spazi nella possibilità
runjdwp
. - 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.
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:
- Avviare l'applicazione Java remoto con opzioni di debug, come detto nel post sopra.
- Configurare Eclipse per il debug remoto specificando host e la porta.
- Avvia debug remoto in Eclipse e aspettare per il collegamento ad avere successo.
- punto di interruzione di installazione ed eseguire il debug.
- 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.