Debug remoto di Tomcat con Eclipse


95

Non riesco a eseguire il debug dell'applicazione Tomcat tramite Eclipse. Ho impostato

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

e poi corro bin/catalina.sh, dove vedo uscita dicendo che di ascolto per dt_socketil port 8000. Ma ogni volta che provo a connettermi alla porta 8000in Eclipse (aggiungendo una voce nel menu dell'applicazione Java remota), si lamenta di una connessione rifiutata. Qualche idea?


puoi pubblicare la tua configurazione remota usata in eclipse.
Sean

Risposte:


133

Puoi controllare se funziona?

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

catalina.sh jpda start

4
In realtà, il tuo l'ha risolto. Eclipse in realtà non dice nulla quando si connette correttamente e la riconnessione una seconda volta forza l'errore. Quindi stava funzionando, ma non me ne sono accorto.
vincitore

18
Questo è per quelli con sistema operativo Windows:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
Lee Chee Kiam

1
Cosa fa l'opzione suspend = n?
Trismegistos

2
@Trismegistos. suspendspecifica se la jvm deve attendere il debugger o continuare. Vedi questo documento .
Raghuram

9
In realtà catalina.sh jpda startdovrebbe essere sufficiente. Il catalina.sh ha un paio di JPDA_*parametri che possono essere usati, ad esempio, per cambiare porta, vedere il file per la documentazione.
zpon

53

Ci ho dedicato un po 'di tempo per ottenere le giuste informazioni.

Quindi ecco le informazioni dettagliate passo dopo passo.

Ambiente: Windows 7

Versione TomCat: 7.0.0

IDE: Eclipse

Le configurazioni da aggiungere per abilitare il debug remoto con in Tomcat è

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

Non consiglio la configurazione di cui sopra per ambienti non Windows. Per aggiungere la configurazione di cui sopra, fare doppio clic sul server Tomcat che sarà disponibile nella visualizzazione server. Trova la schermata qui sotto. inserisci qui la descrizione dell'immagine

Ora aggiungi la configurazione dell'ambiente di runtime sopra a tomcat. Per questo controlla lo screenshot qui sotto.

inserisci qui la descrizione dell'immagine

Ora sono arrivato alla scheda Arugments in Modifica proprietà di configurazione di avvio come mostrato nella schermata sottostante.

inserisci qui la descrizione dell'immagine

La sezione degli argomenti di GoTo VM aggiunge queste righe.

-Xdebug

-agentlib: jdwp = trasporto = dt_socket, indirizzo = 8000, server = y, suspend = n

inserisci qui la descrizione dell'immagine

Ora ho il pulsante di debug disponibile sulla barra degli strumenti di eclipse.

inserisci qui la descrizione dell'immagine

Nelle configurazioni di debug trova "Applicazione Java remota" e fai doppio clic su di essa.inserisci qui la descrizione dell'immagine

Nel campo Nome inserisci il nome che ti piace.

Dal campo del progetto utilizzando il pulsante Sfoglia selezionare il progetto che si desidera eseguire il debug remoto.

Il nome host non è altro che l'indirizzo host. Qui sto lavorando a livello locale quindi è "localhost".

Alla fine della colonna Porta il valore dovrebbe essere 8000. Oltre ai campi di testo Nome e Progetto, altre due colonne Host e porta verranno riempite da eclipse stesso se non ti fanno avere gli stessi valori menzionati. Controlla la schermata per informazioni.inserisci qui la descrizione dell'immagine

Ora fai clic con il pulsante destro del mouse su TomcatServer nella console del server seleziona Aggiungi e Rimuovi dal menu di scelta rapida. Da questa finestra di dialogo puoi aggiungere il progetto al server.

Ora esegui il server Tomcat.

inserisci qui la descrizione dell'immagine

Ora esegui TomCatDebugConfiguration dallo strumento di debug.

Per ultimo apri il browser interno o esterno ed esegui il tuo progetto. Se il controllo dell'esecuzione ha raggiunto i punti di interruzione, l'eclissi richiederà la prospettiva di debug.


47

Nella directory bin di tomcat dove si trova catalina.bato .sh(ovvero {CATALINA_BASE} / bin), modifica (crea se non presente):

setenv.bat/.sh

Aggiungi la seguente riga:

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

Questo è tutto ciò che devi fare, non è necessario modificare il file catalina.bat(o .sh).

Vedere i commenti in catalina.bato catalina.sh.

Potrebbe essere necessario modificare la sintassi per il proprio ambiente / situazione particolare. Ad esempio, se hai già definito CATALINA_OPTS, potresti fare qualcosa del genere (in un ambiente Windows):

set CATALINA_OPTS=%CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8088,server=y,suspend=n

Per eseguire il debug da Eclipse:

esegui-> Debug configurazioni ...-> Applicazione Java remota-> Nuovo

e specificare un nome, il progetto di cui si sta eseguendo il debug e l'host Tomcat e la porta di debug specificati sopra.


Se sta funzionando, dovrai impostare questo CATALINA_OPTS in setenv.sh che si trova nella directory tomcat / bin. Grazie.
Amit Kumar

1
Nel mio setenv.bat era JAVA_OPTS (tomcat 7)
vikingsteve

Ciao Philip, ho aggiunto alcune note che potrebbero aiutare, in caso contrario: quali versioni di os, tomcat ed eclipse stai usando?
karl

in setenv.bat nella bindirectory mettere una linea come set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n, uso startup.batdi avviare Tomcat
Paramvir Singh Karwal

33

Nel catalina.batfile si prega di modificare quanto segue.

  • 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: eseguire Tomcat dal prompt dei comandi come di seguito: catalina.sh jpda start

  • Passaggio 4: quindi in Eclipse creare una configurazione di debug

    1. Assegna un nome qualsiasi per la configurazione.
    2. Dai il project name.
    3. Assegna il tipo di connessione come Standard(Socket Attach)
    4. host as localhost
    5. port as 8000(o qualsiasi numero di porta, ma dovrebbe essere lo stesso anche in altri posti).

Ho trovato CATALINA_OPTS nelle seguenti parti su catalina.bat,: doStop shift set ACTION = stop set CATALINA_OPTS = goto execCmd: doConfigTest shift set ACTION = configtest set CATALINA_OPTS = goto execCmd dove modificarlo? Puoi semplicemente caricare i contenuti del tuo catalina.bat?
Gopakumar NG

Sembra che tu stia scrivendo la stessa cosa due volte. Ho saltato il tuo passaggio 1 e funziona. Puoi confermare che non è necessario modificare CATALINA_OPTS?
Henry Aloni

per la diff tra Vedi CATALINA_OPTS & JPDA_OPTS vedere: stackoverflow.com/questions/11222365/...
Mike R

1
Questo non funzionerà in Tomcat 8. Affinché funzioni in Tomcat 8, è necessario omettere il passaggio 1.
Dave

@RAJ. Ha funzionato perfettamente in Tomcat 6. Grazie mille.
T8Z

7

Molte delle risposte precedenti sono corrette, ma ricorda che per impostazione predefinita il debugger ascolterà solo su localhost. Se stai eseguendo il debug di un server remoto , dovrai specificare l'indirizzo IP su cui ascoltare, ad esempio

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

catalina.sh jpda start

Notare che l'indirizzo ora è 10.1.1.33 : 8000

Naturalmente, puoi anche verificare quale IP è effettivamente utilizzato, eseguendo

netstat -an

sia su Windows che su Linux e filtra la porta con find(Windows) o grep(Linux).


Penso che tu intenda quale PORTA viene effettivamente utilizzata non quale IP .
Abdollah

1
No, intendo "indirizzo IP". Se esegui il debug remoto (da un'altra macchina) devi essere in grado di specificare un indirizzo IP diverso da localhost o 127.0.0.1. Ovviamente avrai sempre bisogno anche del numero di porta.
DAB

5

Basta eseguire ./catalina.sh jpda start(fork) o ./catalina.sh jpda run(non fork, non menzionato nella guida). Tutte le opzioni qui menzionate sono predefinite su valori sani.


5

Fammi condividere il modo semplice per abilitare la modalità di debug remoto in tomcat7 con eclipse (Windows).

Passaggio 1: apri il file bin / startup.bat
Passaggio 2: aggiungi le righe seguenti per il debug con l'opzione JDPA (dovrebbe iniziare la riga del file)

    set JPDA_ADDRESS=8000  
    set JPDA_TRANSPORT=dt_socket  

Passaggio 3: nello stesso file ... vai alla fine del file modifica questa riga -

    call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%  
    instead of line  
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%  

passaggio 4: quindi esegui bin> startup.bat (quindi ora il tuo server tomcat è stato eseguito in modalità remota con la porta 8000).

passaggio 5: dopo di che consente di connettere il progetto sorgente tramite l'IDE di eclipse con il client remoto.

step6: nell'IDE Eclipse vai a "configurazione di debug"

passaggio 7: fare clic su "applicazione Java remota" e quindi fare clic su "Nuovo"

step8. nella scheda "connetti" impostare il valore del parametro

   project= your source project  
   connection Type: standard (socket attached)   
   host: localhost  
   port:8000  

step9: fai clic su applica ed esegui il debug.

così finalmente il tuo client remoto eclipse è connesso al server tomcat in esecuzione (modalità debug).

Spero che questo approccio possa esserti d'aiuto.

Saluti..


4

Modifica catalina.bat per aggiungere

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

e

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

Facoltativo: aggiungi sotto la riga per eseguire la modalità di debug per impostazione predefinita quando esegui startup.bat

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

Eclipse o STS seleziona la configurazione di debug facendo clic con il pulsante destro del mouse -> nuovo

connection type -> Standard socket Attach
Port -> 8000 (as given in the CATALINA_OPTS)
Host -> localhost or IP address

Questa informazione è per WINDOWS, ma mi è capitato di essere su Windows e quindi mi ha aiutato. Grazie!
Suona il

2

Se ancora tutto quanto sopra non funziona, puoi sempre aggiungerlo allo script

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

2

In tomcat 7, catalina.sh ha questo codice:

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

Ciò implica che puoi configurare JPDA con:

export JPDA_TRANSPORT=dt_socket
export JPDA_ADDRESS=8000
export JPDA_SUSPEND=n

Oppure con:

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

E infine usa:

catalina.sh jpda start

Saluti


Tomcat 8: Le variabili JPDA_ possono essere impostate in setenv.sh senza la necessità di "esportarle". In ogni caso il primo parametro della chiamata di avvio deve essere 'jpda'. Se avvii Tomcat come servizio, la cosa migliore è modificare lo script $ {CATALINA_HOME} /bin/startup.sh, aggiungere il parametro "jpda" nell'ultima riga prima di "start": ´´exec "$ PRGDIR" / "$ EXECUTABLE "jpda start" $ @ "´´.
Heri

1

Stavo riscontrando questo problema durante l'esecuzione di Tomcat all'interno di un container Docker. Per risolvere questo problema, assicurati di aggiungere l'argomento "-p 8000: 8000" nel comando di esecuzione della finestra mobile per esporre questa porta alla macchina locale. Ovviamente avrai bisogno anche del file setenv.sh nella tua $ {CATALINA_HOME} / bin / all'interno del tuo contenitore.


0

La modifica di startup.bat con CATALINA_OPTS E JPDA_OPTS non ha funzionato per me, ma aggiungendoli a catalina.bat sì

  1. Modifica catalina.bat

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

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

  1. Modifica startup.bat per includere jpda

cambia la chiamata "% EXECUTABLE%" start% CMD_LINE_ARGS% a

chiama "% EXECUTABLE%" jpda start% CMD_LINE_ARGS%

Quindi configurare l'applicazione Java remota nelle configurazioni di debug in Eclipse.


0

Prima di tutto, se apri catalina.bat con un editor di testo, vedi che: "Non impostare le variabili in questo script ....." Quindi non cambiarlo mai in quello script, invece puoi fare i seguenti passaggi:

  1. Ti consiglia di creare un nuovo file bat con il nome "setenv.bat".
  2. Quindi imposta 2 variabili in quel file bat come:

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

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

  3. Infine eseguilo su cmd che: "catalina.bat jpda start"

  4. In IDE, creare una configurazione di debug remoto e impostare l'host sull'ip e la porta del server correlato su 8000.


0

Per la versione apache-tomcat-8.5.28 basta fare questo,

catalina.bat jpda start

Come le impostazioni predefinite già configurate per noi in catalina.bat come

se non "% JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, address =% JPDA_ADDRESS%, server = y, suspend =% JPDA_SUSPEND%

Quindi non c'è bisogno di altre configurazioni. E quando esegui il comando catalina.bat jpda start, puoi vedere che la porta di debug 8000 è aperta.



-2

Per apache-tomcat-8.5.28

modificare JDPA_OPTScome di seguito quindi eseguire comecatalina.bat jpda start

JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=8000,server=y,suspend=$JPDA_SUSPEND"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.