CodeGym /Java Blog /Random-IT /Debug in IntelliJ IDEA: una guida per principianti
John Squirrels
Livello 41
San Francisco

Debug in IntelliJ IDEA: una guida per principianti

Pubblicato nel gruppo Random-IT
Ciao a tutti nella community di CodeGym! Oggi parliamo di debug: che cos'è e come eseguire il debug in IntelliJ IDEA. Questo articolo è destinato a persone che hanno già una conoscenza minima di Java Core. Non ci saranno framework o procedure complicate per pubblicare le librerie. Una piacevole passeggiata. Quindi mettiti comodo e cominciamo! Debug in IntelliJ IDEA: una guida per principianti - 1

Perché hai bisogno della modalità Debug

Chiariamo subito una cosa per noi stessi: non c'è codice senza bug... È così che funziona la vita. Quindi, non dovremmo cadere a pezzi e arrenderci se il nostro codice non funziona come ci aspettavamo. Ma cosa dovremmo fare? Bene, potremmo inserire System.out.printlndichiarazioni ovunque e poi setacciare l'output della console nella speranza di trovare un errore. Detto questo, puoi (e le persone lo fanno) eseguire il debug utilizzando un'attenta registrazione. Ma se puoi eseguire il tuo codice su un computer locale, è meglio usare la modalità Debug . Voglio notare subito che in questo articolo considereremo il debug di un progetto utilizzando IntelliJ IDEA.

Cos'è la modalità Debug?

La modalità di debug serve per il debug (verifica) del codice in esecuzione. Ti consente di interrompere l'esecuzione in luoghi designati e osservare come stanno procedendo le cose. Ti consente di comprendere lo stato del programma in un punto particolare del codice. È proprio come poter fermare l'orologio e guardare tutto di lato. Fantastico, vero? Il nostro obiettivo è imparare rapidamente e facilmente come eseguire il debug delle applicazioni utilizzando il nostro amato ambiente di sviluppo IntelliJ IDEA.

Di cosa hai bisogno per iniziare il debug

Ecco alcuni consigli gratuiti: durante la lettura di questo articolo, fai tutto ciò che verrà descritto qui: hai tutto ciò che devi fare per seguirlo. Quello che ti serve:
  1. IntelliJ IDEA versione 2019.3.1 o successiva. Nel caso in cui qualcuno non lo avesse, ecco un link dove puoi scaricarlo . Scarica la Community Edition: questa è la versione che userò.
  2. Clona questo progetto GitHub e importalo tramite IDEA.
Apri IDEA: Debug in IntelliJ IDEA: una guida per principianti - 2seleziona il progetto di presentazione di debug e premi OK . Quindi vedrai la seguente finestra: Debug in IntelliJ IDEA: una guida per principianti - 3Lascia le opzioni selezionate: Importa progetto da fonti esterne e Maven . Fare clic su Fine . Ora che abbiamo importato il progetto, possiamo descrivere il resto del processo con un esempio vivente.

Solo un po' di teoria... lo prometto :D

Per iniziare a eseguire il debug anche solo un po', è necessario capire cos'è un punto di interruzione e avere familiarità con alcuni tasti di scelta rapida. Un punto di interruzione è un indicatore speciale che indica il punto in cui si desidera interrompere l'esecuzione dell'applicazione, possibilmente in base allo stato dell'applicazione. Puoi impostare un punto di interruzione facendo clic con il pulsante sinistro del mouse sul pannello laterale sinistro o facendo clic sulla posizione del codice e premendo Ctrl+F8 . Diamo un'occhiata a tre tipi di breakpoint: line breakpoint, field watchpoint e e method breakpoint. Ecco come appare:
  • Su una riga:

    Debug in IntelliJ IDEA: una guida per principianti - 4

    Se un'istruzione ha un'espressione lambda, IDEA richiede di scegliere se inserire il punto di interruzione nell'intera istruzione o specificamente nell'espressione lambda:

    Debug in IntelliJ IDEA: una guida per principianti - 5
  • Su un metodo:

    Debug in IntelliJ IDEA: una guida per principianti - 6
  • Su una classe:

    Debug in IntelliJ IDEA: una guida per principianti - 7
I punti di interruzione possono essere rimossi seguendo gli stessi passaggi utilizzati per aggiungerli. Ci sono situazioni in cui vorrai disattivarli (silenziarli). Per fare ciò, trova l' Debug in IntelliJ IDEA: una guida per principianti - 8icona nella sezione Debug. Questo disattiverà tutti i punti di interruzione. Per vedere quali punti di interruzione sono stati impostati, puoi andare alla sezione Debug nell'angolo in basso a sinistra e trovare l' Debug in IntelliJ IDEA: una guida per principianti - 9icona, oppure premere Ctrl+Maiusc+F8 : Debug in IntelliJ IDEA: una guida per principianti - 10Passando all'elenco dei punti di interruzione, vedremo quanto segue: Debug in IntelliJ IDEA: una guida per principianti - 11Ci sono due punti di interruzione Qui:
  • Bee.java:24 — nella classe Bee sulla riga 24
  • Main.java:14 — nella classe Main sulla riga 14
Tieni presente che questi punti di interruzione non verranno impostati automaticamente se hai clonato il progetto: dovrai impostarli tu stesso! C'è anche una sezione Java Exception Breakpoints . E 'molto utile. Qui puoi aggiungere un punto di interruzione implicito in modo che il programma si arresti prima di lanciare qualsiasi eccezione o un'eccezione specifica. Aggiungeremo un punto di interruzione implicito per RuntimeException. È facile da fare. Trova l'icona "+" nell'angolo in alto a sinistra. Fare clic su di esso e selezionare Java Exception Breakpoints : Debug in IntelliJ IDEA: una guida per principianti - 12Nella finestra che appare, scrivere il nome dell'eccezione che si desidera aggiungere, selezionare dall'elenco e fare clic su OK : Debug in IntelliJ IDEA: una guida per principianti - 13Questo conclude il nostro primer su come impostare le cose, quindi ora Passerò a un po' di pratica.

Andiamo a fare questa cosa chiamata debugging!

Vengo da una lunga stirpe di apicoltori di famiglia, quindi il progetto che ho creato per illustrare il debug descrive i modelli del processo delle api che raccolgono il nettare, trasformano il nettare in miele e poi ottengono il miele dall'alveare. Secondo il file README della documentazione , che si trova nella directory principale del progetto, il comportamento atteso di tutti i fiori da cui viene raccolto il nettare è che la quantità di miele raccolto (che assume la forma di un double ) sia pari alla metà di il nettare raccolto. Il progetto prevede le seguenti classi:
  • Ape - una normale ape operaia
  • BeeQueen - l'ape regina
  • BeeHive - l'alveare
  • HoneyPlant - una pianta di miele (fonte di nettare) da cui viene raccolto il nettare
  • Main: è qui che troviamo public static void main(), il metodo da cui inizia l'esecuzione.
Se eseguiamo il main()metodo, scopriamo che non solo il nostro programma non calcola la quantità di miele, ma genera anche un'eccezione... Debug in IntelliJ IDEA: una guida per principianti - 14Dobbiamo indagare e determinare qual è il problema. Dallo stack di traccia nell'angolo in basso a destra, possiamo vedere che in un'eccezione RuntimeException è stata lanciata a HoneyPlant.java:20: Debug in IntelliJ IDEA: una guida per principianti - 15è proprio quello di cui stavamo parlando sopra. Osserviamo questa RuntimeException eseguendo il main()metodo in modalità debug. Per fare ciò, fai clic sulla freccia triangolare verde in IntelliJ IDEA accanto al main()metodo. Debug in IntelliJ IDEA: una guida per principianti - 16Come risultato, fermeremo il programma nel momento appena prima che venga generata l'eccezione e vedremo questa icona: Debug in IntelliJ IDEA: una guida per principianti - 17Debug in IntelliJ IDEA: una guida per principianti - 18Per ottenere tutte le informazioni disponibili, dobbiamo guardare nella sezione Debug. Ha una variabileriquadro che mostra tutte le variabili disponibili in questa parte dell'applicazione:
  • nettare = 1,0;
  • nettareCapacità = -1.0.
Lanciare l'eccezione ha senso, perché una pianta di miele non può avere una quantità negativa di nettare. Ma perché sta succedendo questo? Dopotutto, nelle righe 15-17, controlliamo se la fornitura di nettare è esaurita e restituiamo zero se è:

	if (nectar == 0) {
   	     return 0;
}
Ma il problema è che stiamo controllando la variabile sbagliata. Questo è un errore nel codice. Invece di controllare la quantità di nettare disponibile nel fiore (memorizzata nella variabile nectarCapacity ), il programma controlla il valore del parametro del metodo nectar , che è la quantità di nettare che vogliamo prelevare dal fiore. Ecco qui! Il nostro primo bug! Dopo aver risolto questo problema, otteniamo il seguente codice:

	if (nectarCapacity == 0) {
   	     return 0;
}
Eseguire ora il main()metodo nel modo normale (Run 'Main.main()'). Non viene generata alcuna eccezione e il programma funziona: Debug in IntelliJ IDEA: una guida per principianti - 19l'applicazione viene eseguita fino al completamento e fornisce la seguente risposta:

"33.0 honey was produced by 7 bees from 2 honey plants"
Adesso andrebbe tutto bene, ma questa risposta non è corretta... Secondo il file README della documentazione , il nettare viene convertito in miele con un rapporto di 2 a 1:

## Documentation
Presentation based on honey production.

**Note**: 2 units of nectar = 1 unit of honey
Il metodo principale ha chiaramente due piante di miele con 30 e 40 unità di nettare, rispettivamente. Quindi alla fine dovremmo ritrovarci con 35 unità di miele. Ma il programma ci dice che ne prendiamo 33. Dove sono finite le altre due unità? Scopriamolo! Per fare ciò, impostare un punto di interruzione nel Main.main()metodo alla riga 28, dove beeHive.populateHoney()viene chiamato ed eseguire il main()metodo in modalità Debug: Debug in IntelliJ IDEA: una guida per principianti - 20Considereremo questo punto in maggior dettaglio. Il programma ha interrotto l'esecuzione prima dell'esecuzione della riga 28. Nella parte inferiore, vediamo la sezione Debug, che mostra tutte le informazioni disponibili sull'applicazione in esecuzione. Come già accennato, il riquadro Variabili contiene tutte le variabili e gli oggetti disponibili da questa parte dell'applicazione. Il riquadro Frame mostra i passaggi che sta attraversando l'applicazione: puoi guardare i passaggi precedenti (frame) e vedere tutti i dati locali. Per continuare l'esecuzione del programma, puoi premere F9 o l'icona verde, come mostrato di seguito: Debug in IntelliJ IDEA: una guida per principianti - 21Per interrompere il programma, fai clic sul quadrato rosso: Debug in IntelliJ IDEA: una guida per principianti - 22Per riavviare l'applicazione in modalità debug, fai clic sulla freccia: Debug in IntelliJ IDEA: una guida per principianti - 23Inoltre, puoi procedere attraverso il applicazione passo dopo passo utilizzando due tasti:
  • F8 — Esamina il codice senza entrare nei metodi;
  • F7: passa attraverso il codice ed entra nei metodi.
Nel nostro caso, dobbiamo premere F7, per entrare nel beeHive.populateHoney()metodo. Entrando in esso, otteniamo: Debug in IntelliJ IDEA: una guida per principianti - 24Ora useremo F8 per passare attraverso questo metodo e descrivere cosa succede in esso:
  • Riga 25: l'API Stream viene utilizzata per raccogliere il nettare da tutte le api
  • Riga 26 - Il miele appena creato viene aggiunto al miele esistente;
  • Riga 27 — 2 unità di miele sono assegnate alla regina
  • Riga 28 — Queste due unità vengono rimosse dalla quantità totale di miele
  • Riga 29 - La regina mangia questo miele.
Ecco dove sono finite le due unità mancanti! Evviva! Dopo aver parlato con un analista aziendale, concludiamo che il file README della documentazione contiene un errore e deve essere aggiornato. Aggiorniamo il file README:

## Documentation
Presentation based on honey production.

**Note**:
* 2 units of nectar = 1 unit of honey
* The queen bee eats 2 units of honey every time when beehive is replenished with honey.
Sono state fatte. Abbiamo corretto tutti i bug che abbiamo trovato. Possiamo tranquillamente andare avanti con uno sguardo compiaciuto, sorseggiare un caffè e leggere articoli su Stack Overflow CodeGym :)

Riassumiamo

In questo articolo abbiamo appreso:
  • il lavoro di tutti ha errori e il debug è un ottimo modo per risolverli
  • che cos'è un punto di interruzione e quali tipi di punti di interruzione esistono
  • come impostare un punto di interruzione dell'eccezione
  • come scorrere il codice in modalità debug

Articolo da leggere

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION