Ciao a tutti, comunità JavaRush. Oggi parleremo di debugging: cos'è e come eseguire il debug in Intellij IDEA. L'articolo è rivolto a persone che hanno già una conoscenza minima di Java Core. Non ci saranno strutture o processi complessi per la pubblicazione delle biblioteche. Passeggiata facile. Allora mettiti comodo e cominciamo!
della documentazione del file README, che si trova nella radice del progetto, leggiamo: comportamento previsto - da tutti i fiori da cui si raccoglie il nettare (come valore doppio ), verrà raccolta una quantità di miele pari alla metà di il nettare raccolto. Il progetto prevede le seguenti classi:
della documentazione è scritto che il nettare si trasforma in miele in un rapporto di 2 a 1:
il file README della documentazione contiene un errore e dovrà essere aggiornato. Aggiorniamo il file README:
JavaRush con uno sguardo smart :)
Perché hai bisogno del debug?
Mettiamolo subito in chiaro: non esiste codice senza bug... Così funziona la vita. Pertanto, non dovremmo indebolirci immediatamente e rinunciare a tutto se il codice non funziona come previsto. Ma cosa fare? Naturalmente, puoi impostarloSystem.out.println
dove puoi e poi ordinare l'output nel terminale nella speranza di riuscire a trovare un errore. Tuttavia, è possibile... e lo fanno, e lo fanno con attenzione utilizzando il logging (puoi leggerlo qui ). Ma se è possibile eseguire il codice sul computer locale, è meglio utilizzare Debug . Vorrei subito notare che in questo articolo considereremo il debug di un progetto all'interno di Intellij IDEA. Se sei interessato a leggere informazioni sul debug remoto, ecco un articolo dalla nostra risorsa .
Cos'è Debug
Il debug è il processo di debug (controllo) del codice, quando durante la sua esecuzione puoi fermarti in un luogo designato e osservare l'avanzamento dell'esecuzione. Comprendere lo stato del programma in un determinato luogo. È esattamente come se potessi fermare la vita e guardare tutto dall’esterno. Fantastico, vero? Il nostro obiettivo è imparare in modo rapido e semplice come eseguire il debug delle applicazioni utilizzando il nostro ambiente di sviluppo preferito, Intellij IDEA.Cosa ti serve per iniziare il debug
Do un consiglio gratuito: mentre leggi l'articolo, fai tutto quello che verrà descritto qui, per fortuna c'è tutto per questo. Di che cosa hai bisogno:- Ambiente di sviluppo Intellij IDEA versione 2019.3.1 e successive. Nel caso in cui qualcuno non ce l'abbia, ecco un link dove è possibile scaricarlo. Scarica la Community Edition perché è quella che userò.
- Clona il progetto da GitHub e importalo tramite IDEA.
Un po' di teoria... lo prometto :D
Per iniziare un po' il debug, devi capire cos'è breakPoint e comprendere alcuni tasti di scelta rapida necessari per iniziare. BreakPoint è un indicatore speciale che visualizza la posizione o lo stato in cui l'applicazione deve essere arrestata. Puoi impostare un punto di interruzione facendo clic con il pulsante sinistro del mouse sulla barra laterale sinistra oppure facendo clic sulla posizione del codice e premendo Ctrl + F8 . I punti di interruzione sono di tre tipi: contrassegno di linea, contrassegno di variabile e contrassegno di metodo. Sembra questo:-
Per riga:
se c'è una lambda nell'espressione, IDEA ti offre una scelta: inserire l'espressione sull'intera riga o specificamente nella lambda:
-
Per metodo:
-
Per classe
- Bee.java:24 - nella classe Bee sulla riga 24
- Main.java:14 - nella classe Main alla riga 14
Andiamo, entriamo nelle terre selvagge del debug
Poiché sono un apicoltore ereditario, per la presentazione di debug ho creato un progetto che descrive il processo di raccolta del nettare da parte delle api, trasformazione del nettare in miele e ottenimento del miele dall'alveare. Sulla base- Ape: un'ape operaia ordinaria;
- BeeQueen - ape regina;
- BeeHive - alveare;
- HoneyPlant - pianta del miele da cui viene raccolto il miele;
- Principale: dove
public static void main()
si trova il metodo in cui viene avviato il progetto.
main()
, si scopre che non solo non viene conteggiata la quantità di miele, ma appare anche un errore... Devi vedere cosa c'è che non va. Dallo stack trace nell'angolo in basso a destra, possiamo vedere che in HoneyPlant.java:20
, viene lanciata una RuntimeException: Questo è esattamente il nostro caso: c'è una RuntimeException, aggiungiamo una ricerca per tale eccezione, come descritto sopra, ed eseguiamo main()
il metodo in modalità di debug. Per fare ciò, fare clic sulla freccia del triangolo verde in Intellij IDEA prima del metodo main()
: e otterremo il programma interrotto al momento prima che venga attivata l'eccezione con questa icona . Per ottenere informazioni complete, è necessario guardare nella sezione Debug. Ha Variables , che mostra tutte le variabili disponibili in questa parte dell'applicazione:
- nettare = 1,0;
- capacità di nettare = -1,0.
if ( nectar == 0 ) {
return 0;
}
Ma il problema è che sta controllando la variabile sbagliata... e questo è un bug nel codice. Invece di controllare il valore del nettare nel fiore, che si trova nella variabile nectarCapacity , il programma controlla il valore del nettare , che entra nel metodo ed è la quantità che si vuole prelevare dal nettare. Eccolo, il primo bug! Pertanto, lo inseriamo correttamente e otteniamo l'espressione:
if ( nectarCapacity == 0) {
return 0;
}
Successivamente, eseguiamo main()
il metodo in modalità normale (Run `Main.main()`)
e non si verificano più errori, il programma ha funzionato: L'applicazione ha funzionato e ha dato la risposta: "33.0 il miele è stato prodotto da 7 api di 2 piante mellifere" Andrebbe tutto bene, ma la risposta è sbagliato... Tutto perché nel file README ## Documentation
Presentation based on honey getting process.
**Note**: 1 honey point = 2 nectar points
Dal metodo principale si vede che ci sono due piante di miele, rispettivamente 30 e 40 unità di nettare, quindi alla fine dovresti ottenere 35 unità di miele. E scrive che 33. Dove sono finite le altre due unità?… Ora lo scopriremo! Per fare questo dobbiamo inserire un punto di interruzione nel metodo Main.main()
alla riga n. 28, dove viene eseguito beeHive.populateHoney()
ed eseguire main
il metodo in modalità Debug: diamo un'occhiata più da vicino a questo punto. Il programma si è interrotto prima di eseguire la 28a riga. In basso vediamo la sezione Debug, che descrive tutte le informazioni sull'applicazione in esecuzione. La parte Variabili, come già accennato, contiene tutte le variabili e gli oggetti accessibili da questa parte dell'applicazione. La parte Frames mostra i passaggi eseguiti dall'applicazione, puoi guardare il passaggio precedente e ottenere tutti i dati locali. Affinché il programma continui a funzionare è possibile premere F9 o l'icona verde, come mostrato di seguito: Per interrompere il programma è necessario fare clic sul quadratino rosso: Per riavviare l'applicazione in modalità debug è necessario fare clic sulla freccia: Successivamente, per procedere passo dopo passo nell'applicazione, è possibile utilizzare due tasti:
- F8: passa attraverso una sezione di codice e non entrare nei metodi interni;
- F7: passa attraverso una sezione di codice e inserisci metodi interni.
beeHive.populateHoney()
, dobbiamo premere F7 e andremo avanti: Successivamente, passeremo alla modalità debug utilizzando F8 utilizzando questo metodo fino alla fine e descriviamo cosa succede in questo metodo:
- Linea 25 - L'API Stream viene utilizzata per raccogliere il miele da tutte le api;
- 26a riga: il miele viene aggiunto a quello esistente;
- 27a riga: per la regina vengono assegnate 2 unità di miele;
- 28a riga: queste due unità vengono rimosse dalla quantità totale di miele;
- Riga 29: l'utero mangia questo miele.
## Documentation
Presentation based on honey getting process.
**Note**:
* 1 honey point = 2 nectar points
* 2 honey point queen bee eats every time when beehive populates the honey.
E questo è tutto: tutti i bug riscontrati sono stati risolti, possiamo continuare tranquillamente a bere caffè e a leggere articoli sull'hub Riassumere
In questo articolo abbiamo capito che:- non esiste lavoro senza errori e il debugging è un ottimo modo per risolverli;
- cos'è un punto di interruzione e quali tipi esiste;
- come configurare il punto di interruzione delle eccezioni;
- Come navigare in modalità debug.
Articolo da leggere
- Il progetto utilizzato nell'articolo
- IntelliJ IDEA e Debug: non immersioni, ma snorkeling
- L'amara verità sulla programmazione...
- Documentazione ufficiale
- Tipi di punti di interruzione. Documentazione ufficiale
- Come un test di intervista si è trasformato in una libreria open source
- Creare un sistema di monitoraggio dei prezzi dei biglietti aerei: una guida passo passo [Parte 1]
- Guida per creare un client per l'API di Skyscanner e pubblicarlo in jCenter e Maven Central [Parte 1]
- Logging: cosa, come, dove e con cosa?
GO TO FULL VERSION