JavaRush /Java Blog /Random-IT /IntelliJ IDEA e Debug: non immersioni, ma snorkeling
Viacheslav
Livello 3

IntelliJ IDEA e Debug: non immersioni, ma snorkeling

Pubblicato nel gruppo Random-IT
Scrivere il codice è metà dell'opera. Deve ancora essere fatto funzionare correttamente. Gli IDE e gli strumenti di debug ci aiutano molto in questo.
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 1
Utilizzando IntelliJ IDEA come esempio, propongo di familiarizzare con come possiamo scoprire cosa succede al nostro codice quando viene eseguito. Il debug è un argomento ampio, quindi questa recensione non offre immersioni profonde, come un subacqueo. Ma spero di sicuro di fare snorkeling)

introduzione

Parte della scrittura del codice ne sta eseguendo il debug. E se le tue attività includono il supporto del codice, il debug sarà ancora maggiore. Bene, inoltre, con l'aiuto del debug, puoi esaminare il lavoro delle librerie e dei framework utilizzati tanto profondamente quanto puoi immergerti nella giungla del codice di qualcun altro. Per la nostra immersione avremo bisogno di: Innanzitutto, decomprimi l'archivio scaricato con il codice sorgente Quick Start. Avvia IntelliJ Idea e crea un " Nuovo progetto da fonti esistenti ". Selezionare il file pom.xml nella sottodirectory hibernate4 . Durante l'importazione, specifica " Importa progetti Maven automaticamente " e completa la creazione del progetto, lasciando invariate le altre impostazioni. Mentre il progetto viene importato, decomprimi il server delle applicazioni WildFly scaricato in una directory. Avviamo il server utilizzando il file (o standalone.sh per i sistemi *nix). (!) È importante iniziare con il parametro --debug Aspettiamo l'avvio del server. Ci scriveranno che è iniziato tra e indicheranno l'ora. Apparirà qualcosa del genere: bin\standalone.bat
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 2
Successivamente, dobbiamo eseguire il progetto che abbiamo scelto sul server. Questo processo è descritto in una piccola documentazione che può essere trovata nel progetto stesso: \hibernate4\README.adoc Come indicato in questa documentazione, dobbiamo eseguire il comando nella directory hibernate4: mvn clean package wildfly:deploy Stiamo aspettando un messaggio che la compilazione è stata completata con successo:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 3
Successivamente, nel log del server possiamo vedere come è stato “deployato” il nuovo progetto:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 4
Successivamente, andiamo alla pagina http://localhost:8080/wildfly-hibernate4e dovremmo visualizzare una pagina con il modulo “ Registrazione membro ”. Quindi, la nostra preparazione per gli esperimenti è completa e possiamo iniziare)) Ci saranno molte immagini più avanti per maggiore chiarezza, quindi preparatevi)

Debug remoto

Quindi, dobbiamo configurare la modalità Debug in modo che il nostro IDE controlli l'esecuzione del codice sul server delle applicazioni. IntelliJ Idea è disponibile in due versioni: gratuita (Community) e a pagamento (Ultimate). Quest'ultimo può essere ufficialmente provato sotto forma di EAP. Nella versione Ultimate tutto è semplice: il server delle applicazioni può essere avviato direttamente dall'IDE in modalità debug. Ma nella versione Community devi fare alcune cose manualmente. Consideriamo quindi un caso più complicato, vale a dire impostazione nella versione Community. La versione Community presenta alcune limitazioni. In particolare, non è possibile eseguire un server delle applicazioni da esso. Ma puoi impostare il debug remoto (Remote Debug), quando da qualche parte separatamente c'è un server in esecuzione con l'applicazione di cui abbiamo bisogno. Usiamo la descrizione della configurazione da qui: Debug remoto Wildfly nell'edizione della community IntelliJ Idea (impostazione della configurazione di esecuzione remota per la porta 8787). Dopo la configurazione, lanciamo la nostra nuova configurazione in modalità Debug:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 5
Se tutto va bene, vedremo un messaggio al riguardo di seguito:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 6

Processo di debug

Eseguiamo il debug del salvataggio del record. Per fare questo, dobbiamo prima decidere il luogo in cui esploreremo. A giudicare dalla finestra, abbiamo bisogno del pulsante "Registrati". Troviamolo nel codice. Quindi, abbiamo bisogno di un elemento, dovrebbe avere il testo: "Registrati". Oppure dovrebbe avere qualcosa a che fare con tutto ciò. Fare clic Ctrl+Shift+Fe cercare Registrati tra virgolette. Vediamo che ce n'è uno su index.xhtml.
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 7
Premi Invio per andare alla fonte trovata:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 8
Quindi, vediamo che durante la registrazione viene chiamato memberController.register , che a quanto pare deve essere una sorta di classe Java. Clicca Ctrl+Ne cerca:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 9
In effetti, esiste una classe del genere. Approfondiamolo. A quanto pare, dovrebbe esserci un metodo di registrazione. Fare clic Ctrl+F12e cercare il metodo di registrazione
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 10
In effetti, l'abbiamo trovato. A quanto pare, la registrazione avviene qui, in memberRegistration.register . Premi Ctrl e fai clic sul metodo per "cadere" al suo interno:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 11
Impostiamo ora un “break point” o Break Point. Si tratta di un indicatore che indica il punto in cui deve essere sospesa l'esecuzione del codice. In questo momento avremo l'opportunità di imparare molte cose interessanti. Per dirlo, è necessario fare clic nel punto a destra del numero di riga.
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 12
Nella pagina http://localhost:8080/wildfly-hibernate4 compila i campi e clicca sul pulsante Registrati. L'icona dell'idea sul pannello lampeggerà:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 13
Andando su Idea, puoi vedere che ci sono molte informazioni interessanti nel pannello di debug:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 14
Qui puoi vedere il valore dei campi dell'oggetto. Ad esempio, in cosa consiste un Membro registrato:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 15
Grande. Cos'altro possiamo fare? Possiamo aprire il menu contestuale e selezionare Valuta espressione lì (o tramite il menu Esegui -> Valuta espressione). Meglio ancora, sul pannello di controllo del debugger:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 16
Questa è un'abilità fantastica in un punto di interruzione, avere accesso a tutto ciò a cui ha accesso quel punto di codice, per eseguire qualsiasi codice che potrebbe essere eseguito in quel punto. Per esempio:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 17
Sul pannello di controllo del debugger sono inoltre presenti pulsanti di controllo responsabili della posizione in cui si desidera spostare il controllo del flusso del programma. Non è magico?) Premendo il pulsante F8 (Step Out), percorriamo il codice senza inserire metodi. Premendo F9, smettiamo di scorrere le righe di codice con il debugger e diamo al debugger il controllo sull'esecuzione del programma. Se premiamo F7 (Step Into), esamineremo il codice, inserendo ogni metodo che incontreremo lungo il percorso. A proposito, presta particolare attenzione a questo blocco di informazioni:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 18
Questo mostra il thread in cui ci troviamo e i metodi sullo stack del thread corrente. Ma non è tutto. Per comodità, puoi aprire la scheda Cornici. Per fare ciò deve essere abilitato:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 19
Ora nella scheda frame vediamo le informazioni sulla transizione da un metodo all'altro, perché ho iniziato a esaminare il codice utilizzando Step Into.
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 20
Come vediamo, non possiamo sempre essere trasferiti dove il programma viene attualmente eseguito. Ora siamo a "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)". Ma in realtà siamo in fase di attuazione. Ciò è evidenziato dalla classe specificata da questo:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 21
Diamo un'occhiata a questo. Come sappiamo, punta all'oggetto corrente. Siamo a TransactionScopedEntityManager. Perché Idea non può mostrarci il codice? Il fatto è che IntelliJ Idea attualmente non conosce alcun TransactionScopedEntityManager, perché non è collegato al nostro progetto (non è nelle dipendenze del progetto). Quando un server delle applicazioni è in esecuzione, al suo interno sono in esecuzione moltissime librerie diverse. Ma sappiamo molto poco di loro, perché... in generale, non abbiamo bisogno di approfondire gli aspetti interni, abbiamo solo bisogno che funzioni. Ma a volte il lavoro o l’interesse sportivo lo richiedono. Quindi, devi informare Idea di questa libreria in modo che sappia dove trovare il codice della classe.

Collegamento di librerie di terze parti per il debug

Innanzitutto dobbiamo capire noi stessi che tipo di biblioteca deve essere collegata. Il primo modo è il più difficile: cercare su Internet. La velocità e il risultato nel trovare un risultato dipendono molto da quanto bene è stato gestito il progetto. Ad esempio, WildFly ha un repository aperto. Quindi, quando cerchiamo su Google "TransactionScopedEntityManager", andremo su https://github.com/wildfly/wildfly/tree/master/jpa/subsystem e scopriremo che abbiamo bisogno di wildfly-jpa. Il secondo metodo è corretto. Dov'è il server, guarda lì. Vari mezzi possono aiutare in questo. Ad esempio, su Windows potrebbe essere Far Manager . Di seguito è riportato un esempio di algoritmo di ricerca. Dopo averlo installato e avviato, utilizza Tab per passare a una delle schede, utilizzando Alt+F1la scheda di sinistra o Alt+F2quella di destra, e selezionare la partizione di cui abbiamo bisogno sul disco rigido. È del tutto possibile che la directory stessa di Far Manager sia aperta in Far Manager dopo l'installazione. Per andare alla radice del disco, premere Ctrl + \. Utilizzando, Alt+Fapri la finestra di ricerca, inizia a digitare il nome della directory e premi Invio dopo aver trovato la directory. Questa ricerca è intelligente ed evidenzia le directory che corrispondono al testo della ricerca. Se si immettono caratteri per i quali non esistono cartelle, tali caratteri non potranno essere inseriti. In questo modo andiamo alla directory del server delle applicazioni. Diciamo che non sappiamo dove si trovano i moduli sul server. Forse questa è la prima volta nella tua vita che senti parlare di una specie di WildFly. Cliccate quindi subito qui Alt+F7per cercare i file. Quindi, la logica impone: abbiamo bisogno di un file con la libreria. Cioè, abbiamo bisogno di un barattolo. All'interno dovrebbe esserci una classe TransactionScopedEntityManager. Perché class = file, quindi cercare "contiene". Cioè, qualcosa del genere:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 22
Adesso aspettiamo il risultato. Non ti farà aspettare)
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 23
Ora dobbiamo trovare il codice sorgente da qualche parte. E ci sono 2 opzioni: Usiamo, forse, il secondo. Troviamo lì:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 24
Passiamo ora a descrivere la dipendenza. In questa pagina è possibile scaricare il codice sorgente. Ottimo, ora abbiamo scaricato il codice. Non resta che connettere la libreria. Si collega in modo estremamente semplice. Dobbiamo aprire le impostazioni del progetto:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 25
Lì selezioniamo "Librerie" e aggiungiamo i codici sorgente ricevuti nella sezione "Sorgenti", e nella sezione "Classi" indichiamo il file jar della libreria stessa dalla directory WildFly, che abbiamo trovato utilizzando Far Manager. Successivamente, quando navigheremo attraverso F7, vedremo il contenuto delle classi AbstractEntityManager e TransactionScopedEntityManager e diventeremo disponibili anche attraverso una ricerca per classe utilizzando Ctrl+N.

Break point con condizioni

Torniamo ora ai Break Points. A volte non sempre vogliamo fermarci, ma solo a determinate condizioni. Cosa fare? E qui anche il nostro IDE ci aiuterà. Posizionando un Break Point possiamo assegnargli una condizione. Ad esempio, inserisci un punto e fai clic con il pulsante destro del mouse su di esso:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 26
Ora il punto di interruzione verrà attivato solo quando il nome è Maximilian. Facendo clic sul pulsante Altro, sarà disponibile una serie estesa di impostazioni per i punti di interruzione.

Break Points sulle eccezioni

A volte potremmo ricevere un errore e vogliamo risalire alla sua provenienza. Quindi possiamo aggiungere un punto di interruzione non in una riga di codice specifica, ma nel punto in cui verrà lanciata l'eccezione. Per fare ciò, è necessario espandere l'elenco di tutti i punti di interruzione:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 27
E crea una nuova regola per il tipo di eccezione selezionato:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 28
Ad esempio, per gli NPE:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 29

Classi HotSwap

Il debugger è una cosa straordinaria. Oltre al debug, ti consente di cambiare classe! Sì, le risorse (come le pagine xhtml, ad esempio) non possono essere modificate così facilmente. Ma il codice delle classi Java può essere sostituito al volo (questo si chiama Hot Swap). Per fare ciò basta cambiare la classe con il debugger allegato ed eseguire Esegui -> Ricarica classi modificate. Recensione utile su questo argomento: 4 modi gratuiti per sostituire a caldo il codice sulla JVM

Conclusione

Un debugger è uno strumento potente che consente allo sviluppatore di penetrare nelle profondità del codice in esecuzione e di studiarlo in ogni dettaglio. Ciò consente di correggere gli errori più confusi. Permette anche di capire meglio come funzionano alcune librerie. Anche una recensione così breve si è rivelata piuttosto impressionante, ma spero che sia utile e interessante. Se qualcuno è interessato a questo materiale, può continuare l'immersione utilizzando i seguenti link:
IntelliJ IDEA e Debug: Non immersioni, ma snorkeling - 30
#Viacheslav
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION