Debug remoto con IntelliJ IDEA

1. Introduzione

Il debug remoto offre agli sviluppatori la possibilità di diagnosticare bug unici su un server o un altro processo. Fornisce i mezzi per rintracciare quei fastidiosi bug di runtime e identificare i colli di bottiglia delle prestazioni e i pozzi di risorse.

In questo tutorial, daremo uno sguardo al debug remoto utilizzando JetBrains IntelliJ IDEA. Prepariamo prima la nostra applicazione di esempio modificando la JVM.

2. Configurare la JVM

Useremo un'applicazione di esempio dello scheduler Spring per connettersi facilmente e aggiungere punti di interruzione a un'attività regolarmente pianificata.

Inoltre, IntelliJ IDEA fornisce i nostri parametri JVM come parte della configurazione :

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

2.1. Parametri JVM

Oltre alla configurazione JDWP (Java Debug Wire Protocol) - jdwp = transport = dt_socket - vediamo i parametri server , suspend e address .

Il parametro server configura la JVM come destinazione per il nostro debugger. Il parametro suspend indica alla JVM di attendere la connessione di un client debugger prima dell'avvio. Infine, il parametro address utilizza un host con caratteri jolly e una porta dichiarata.

Quindi, costruiamo l'applicazione dello scheduler:

mvn clean package

E ora avviamo l'applicazione, incluso il parametro -agentlib: jdwp :

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 \ target/gs-scheduling-tasks-0.1.0.jar

Apri qualsiasi terminale ed esegui il comando. Con la nostra applicazione avviata, passiamo ora a IntelliJ.

3. Eseguire la configurazione in IntelliJ IDEA

Successivamente, in IntelliJ, creiamo una nuova configurazione di esecuzione per il debug remoto:

Ora che la nostra applicazione è in esecuzione, iniziamo la sessione di debug remoto facendo clic sul pulsante Debug .

4. Debug remoto

Successivamente, apriamo il file ScheduleTask e posizioniamo un punto di interruzione alla riga 36 mostrata qui:

public void reportCurrentTime() { log.info("The time is now {}", dateFormat.format(new Date())); }

Poiché l'attività viene eseguita ogni cinque secondi, verrà interrotta subito dopo essere stata aggiunta. Di conseguenza, ora possiamo passare attraverso l'intera applicazione.

Per problemi di applicazione di avvio, cambiamo la sospensione bandiera per n e posizionare un punto di interruzione nella principale modalità di applicazione.

4.1. Limitazioni

A volte la registrazione e l'output ci confondono durante il debug remoto. I log non verranno inviati alla console IDE, quindi un file di log esterno può essere utilizzato e mappato nell'IDE per una capacità di debug più solida.

Ricorda inoltre che mentre il debug remoto è uno strumento molto potente, un ambiente di produzione non è un obiettivo adatto per il debug .

5. conclusione

Come spiegato in questo articolo, il debug remoto con IntelliJ è facile da configurare e utilizzare in pochi passaggi.

Abbiamo esaminato come configurare la nostra JVM dell'applicazione per il debug e alcune limitazioni di questo importante strumento nel nostro toolbox per sviluppatori.

L'applicazione di esempio può essere trovata su GitHub.