Collegare il debugger IntelliJ IDEA a un processo Java in esecuzione


237

È possibile collegare il debugger IntelliJ IDEA a un processo Java in esecuzione? Se si, come?


3
Ovviamente. È necessario creare una configurazione di esecuzione / debug "remota". Altro qui
Vic

2
Ehm, questi argomenti della riga di comando sono SOLO LEGGI dal 14.0.2. Puoi modificarne solo un paio, il che non aiuta a risolvere il problema in questa domanda. Qualche idea su come risolvere questo problema?
nuzzolilo,


Risposte:


373

Sì! Ecco come configurarlo.

Esegui configurazione

Creare una configurazione di esecuzione remota:

  1. Esegui -> Modifica configurazioni ...
  2. Fai clic sul "+" in alto a sinistra
  3. Seleziona l'opzione "Remoto" nel riquadro più a sinistra
  4. Scegli un nome (ho chiamato il mio "debug remoto")
  5. Fai clic su "OK" per salvare:

inserisci qui la descrizione dell'immagine

Opzioni JVM

La configurazione sopra fornisce tre campi di sola lettura. Queste sono opzioni che indicano a JVM di aprire la porta 5005 per il debug remoto durante l'esecuzione dell'applicazione. Aggiungi quello appropriato alle opzioni JVM dell'applicazione di cui stai eseguendo il debug. Un modo in cui potresti farlo sarebbe così:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

Ma dipende da come esegui la tua applicazione. Se non sei sicuro di quale dei tre si applica a te, inizia con il primo e scorri l'elenco fino a trovare quello che funziona.

È possibile passare suspend=na suspend=yper forzare l'applicazione in attesa fino alla connessione con IntelliJ prima dell'avvio. Ciò è utile se il punto di interruzione che si desidera colpire si verifica all'avvio dell'applicazione.

mettere a punto

Avvia l'applicazione come faresti normalmente, quindi in IntelliJ seleziona la nuova configurazione e premi "Debug".

inserisci qui la descrizione dell'immagine

IntelliJ si connetterà alla JVM e avvierà il debug remoto.

È ora possibile eseguire il debug dell'applicazione aggiungendo punti di interruzione al codice dove desiderato. L'output dell'applicazione verrà comunque visualizzato ovunque, ma i punti di interruzione raggiungeranno IntelliJ.


2
L'opzione "Remoto" è assente in Intellij IDEA 15.0.2 su mac os el capitan. Come posso ottenere questa opzione?
user674669

@ user674669 Non sono sicuro. Forse Remotenon è disponibile nell'edizione della community? Sto usando la versione a pagamento. Qualcuno con l'edizione della community può confermare?
Cory Klein,

@CoryKlein Sai come ottenere l'output da System.out.printlnin IntelliJ durante il debug remoto?
Don Rhummy,

1
@DonRhummy Se capisci come, sarei felice di aggiungere tali informazioni a questa risposta, ma AFAIK IntelliJ non ha attualmente il supporto per reindirizzare stdout e stderr da un'applicazione remota a IntelliJ.
Cory Klein,

Se il server remoto è accessibile solo su SSH, come possiamo specificare il file chiave?
Vach

44

È possibile, ma devi aggiungere alcuni flag JVM quando avvii l'applicazione.

Devi aggiungere la configurazione di debug remota: Modifica configurazione -> Remota.

Quindi troverai nella finestra di dialogo visualizzata i parametri che devi aggiungere all'esecuzione del programma, come:

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

Quindi, quando l'applicazione viene avviata, è possibile collegare il debugger. Se vuoi che la tua applicazione attenda che il debugger sia connesso, cambia il flag di sospensione in y ( suspend=y)


Mi ha confuso che tu modifichi gli input qui sotto e questi poi aggiornano le stringhe di opzioni sopra (almeno nel 13.1 CE)
Carl G,

7
Ehm, questi argomenti della riga di comando sono SOLO LEGGI dal 14.0.2. Puoi modificarne un paio. Qualche idea su come risolvere questo problema?
nuzzolilo,

1
Inoltre, a quale processo ti stai attaccando impostando queste opzioni?
nuzzolilo,

5
Il primo ha funzionato per me. Nota agli altri: dovevo specificarlo prima del flag -jar.
jim

2
@Nuzzolilo, gli argomenti della riga di comando visualizzati nell'idea sono solo a scopo di visualizzazione e quindi sono di sola lettura. Non dovrebbero essere aggiunti all'idea ma all'applicazione java remota di cui si desidera eseguire il debug.
Ganesh Krishnan,

6

in AndroidStudio o idea

  1. Configura il debug dell'applicazione, apri Modifica configurazioni

aggiungi Config "Opzioni VM" “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” ricorda "indirizzo"

inserisci qui la descrizione dell'immagine

  1. Se non si esce da Config Remote Debugger, fare clic su + per aggiungere

specificare "Porta" come nel passaggio 1 "indirizzo" inserisci qui la descrizione dell'immagine


6

Inoltre, non dimenticare di aggiungere il flag "-Xdebug" nell'app JAVA_OPTS se desideri connetterti in modalità debug.


0

Uso anche l' app GUI di Tomcat (nel mio caso: C: \ tomcat \ bin \ Tomcat9w.bin).

  • Vai alla scheda Java :

    inserisci qui la descrizione dell'immagine

  • Imposta le proprietà Java, ad esempio:

    Macchina virtuale Java

    C: \ Programmi \ Java \ jre-10.0.2 \ bin \ server \ jvm.dll

    Macchina virtuale Java

    C: \ tomcat \ bin \ bootstrap.jar; C: \ tomcat \ bin \ tomcat-juli.jar

    Opzioni Java :

    -Dcatalina.home = C: \ Tomcat

    -Dcatalina.base = C: \ Tomcat

    -Djava.io.tmpdir = C: \ tomcat \ temp

    -Djava.util.logging.config.file = C: \ tomcat \ conf \ logging.properties

    -agentlib: JDWP = trasporti = dt_socket, server = y, sospendere = n, indirizzo = *: 8000

    Opzioni di Java 9 :

    --add-apre = java.base / java.lang = ALL senza nome

    --add-apre = java.base / java.io = ALL senza nome

    --add-apre = java.rmi / sun.rmi.transport = ALL senza nome

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.