Debug remoto di un’applicazione Java

Ho un’applicazione java in esecuzione su Linux. Eseguo l’applicazione java utilizzando quanto segue:

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

Ho aperto la porta 4000 per TCP su questa macchina Linux. Uso eclipse dal computer Windows XP e provo a connettermi a questa applicazione. Ho anche aperto la porta in Windows.

Entrambe le macchine sono sulla LAN ma non riesco a connettere il debugger all’applicazione Java. Che cosa sto facendo di sbagliato?

Modifica: ho notato che alcune persone stanno tagliando e incollando l’invocazione qui. La risposta che ho dato inizialmente era pertinente solo per l’OP. Ecco uno stile di chiamata più moderno (compreso l’utilizzo della porta più convenzionale di 8000):

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

La risposta originale segue.


Prova questo:

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

Due punti qui:

  1. Nessuno spazio nell’opzione runjdwp .
  2. Le opzioni vengono prima del nome della class. Tutti gli argomenti che hai dopo il nome della class sono argomenti per il tuo programma!

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 i nuovi JDK:

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

Si prega di modificare il numero di porta in base alle proprie esigenze.

Dalle tecniche java

Dalla 5.0 in poi l’opzione -agentlib: jdwp viene utilizzata per caricare e specificare le opzioni dell’agent JDWP. Per le versioni precedenti alla 5.0 vengono utilizzate le opzioni -Xdebug e -Xrunjdwp (l’implementazione 5.0 supporta anche le opzioni -Xdebug e -Xrunjdwp ma è preferibile l’opzione new -agentlib: jdwp in quanto l’agente JDWP in 5.0 utilizza l’interfaccia JVM TI per la VM piuttosto che la vecchia interfaccia JVMDI)

Un’altra cosa da notare, dalla documentazione dell’interfaccia di JVM Tool :

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

passi:

  1. Avvia la tua applicazione java remota con le opzioni di debug come detto nel post precedente.
  2. Configura Eclipse per il debug remoto specificando host e porta.
  3. Avviare il debug remoto in Eclipse e attendere il completamento della connessione.
  4. Setup breakpoint e debug.
  5. Se si desidera eseguire il debug dall’inizio dell’applicazione utilizzare suspend = y, questo manterrà sospesa l’applicazione remota finché non ci si connetterà da eclipse.

Consulta la guida passo passo sul debug remoto di Java per i dettagli completi.

Ecco come installare Eclipse Debugger per il debug remoto:

Impostazioni di Eclipse:

1. Fare clic sul pulsante Esegui
2. Selezionare le configurazioni di debug
3.Seleziona “Applicazione Java remota”
4. Nuova configurazione

  • Nome: GatewayPortalProject
  • Progetto: Portale GatewayPortal
  • Tipo di connessione: Attacco socket
  • Proprietà di connessione: i) localhost ii) 8787

Per JBoss:

1. Cambia /path/toJboss/jboss-eap-6.1/bin/standalone.conf nel tuo vm come segue: Decommenta la seguente riga rimuovendo il #:

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

Per Tomcat:

Nel file catalina.bat :

Passo 1:

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

Passo 2:

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

Passaggio 3. Esegui Tomcat dal prompt dei comandi come di seguito:

 catalina.sh jpda start 

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

La migliore opzione di debug è creare registri e analizzare i registri. Ma in alcuni casi è necessario eseguire il debug dell’applicazione Web distribuita sul server.

Vedi Effettuare il debug in remoto di un collegamento a un’applicazione web java . Il stream completo di debug remoto è descritto qui. Spero che ti sarà d’aiuto.