Debug di script PHP con NetBeans IDE

Come già sapete, quando qualcuno scrive codice in un linguaggio di alto livello ci sono due tipi di errori che lui o lei potrebbe fare—errori di sintassi ed errori logici. NetBeans IDE fornisce tutti gli strumenti necessari per aiutarti a eseguire il debug degli script e trovare gli errori.

Debug degli errori di sintassi

Fortunatamente, NetBeans IDE rileva gli errori di sintassi durante la digitazione e li sottolinea con una linea rossa ondulata come mostrato in Figura 1.

11

Figura 1 Nell’IDE NetBeans, gli errori di sintassi sono sottolineati con una linea rossa ondulata

Tutto ciò che devi fare è correggere l’errore corrispondente e la linea rossa scomparirà immediatamente. Tuttavia, se non sei sicuro di cosa c’è di sbagliato nel tuo codice, puoi semplicemente posizionare il cursore del mouse sul punto esclamativo rosso. NetBeans IDE cercherà di aiutarti mostrando una finestra popup con una breve spiegazione dell’errore, come mostrato in Figura 2.

12

Figura 2 L’IDE di NetBeans mostra una spiegazione di un errore di sintassi

Errori logici di debug eseguendo gli script passo dopo passo

Rispetto agli errori di sintassi, gli errori logici sono più difficili da trovare. Poiché l’IDE di NetBeans non può individuare e sottolineare gli errori logici, sei tutto solo! Diamo un’occhiata al seguente script PHP, per esempio. Richiede all’utente di inserire due numeri e calcola e visualizza la loro somma. Tuttavia, contiene un errore logico!

<?php $s = 0; echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $S = $a + $b; echo "The sum is: ", $s;?>

Se si digita questo script nell’IDE NetBeans, si noterà che non esiste nemmeno un punto esclamativo che indichi alcun errore. Se si esegue lo script (SHIFT+F6), tuttavia, e immettere due valori, 5 e 2, si può vedere di persona che, anche se la somma di 5 e 2 è 7, NetBeans IDE insiste sul fatto che è zero, come mostrato in Figura 3.

13

Figura 3 Visualizzazione del risultato di un errore logico nella finestra di output

Che diamine sta succedendo? Naturalmente per un programmatore esperto, correggere questo errore sarebbe un pezzo di torta. Ma per te, un novizio, anche se stai provando duramente, non trovi nulla di sbagliato. Quindi, dov’è l’errore?

A volte gli occhi umani diventano così stanchi che non riescono a vedere l’ovvio. Quindi, proviamo ad usare un po ‘ di magia! Proviamo ad eseguire lo script passo dopo passo usando il debugger. Questo ti dà l’opportunità di osservare il flusso di esecuzione e dare un’occhiata più da vicino ai valori correnti delle variabili in ogni passaggio.

Avvia il debugger selezionando “Debug Debug file” dal menu principale o premendo la combinazione di tasti CTRL+MAIUSC+F5. In questo modo, si attiva il debugger e più icone vengono visualizzate sulla barra degli strumenti.

netbeans_debug_toolbar

Avviso: Per abilitare il debugger (XDebug), è necessario modificare il PHP.file ini. Maggiori informazioni qui.

Il contatore del programma (la freccia verde green_arrow icona nel margine grigio) si ferma alla prima riga dello script come mostrato in Figura 4.

14

Figura 4 Utilizzo del debugger nell’IDE NetBeans

Avviso: Il contatore del programma mostra, in qualsiasi momento, quale istruzione è la successiva da eseguire.

Fare clic sull’icona “Step into” step_into_netbeans_icon sulla barra degli strumenti. Questa azione indica all’interprete PHP di eseguire l’istruzione $s = 0 e il contatore del programma si sposta sulla seconda istruzione PHP, che è la successiva da eseguire.

Dal menu principale, selezionare “Finestra Debug Variabili”. Nella finestra che appare, è possibile guardare tutte le variabili dichiarate nella memoria principale (RAM) e il valore che contengono durante ogni fase di esecuzione. Fino ad ora, l’unica variabile dichiarata e assegnato un valore è la variabile $s come mostrato in Figura 5.

15

Figura 5 Il valore della variabile s s viene visualizzato nella finestra Variabili del debugger

Fare nuovamente clic sull’icona della barra degli strumenti “Step into” step_into_netbeans_icon. La seconda istruzione viene eseguita. Puoi tornare alla finestra “Output” e vedere il risultato dell’output (vedi Figura 6).

16

Figura 6 Visualizzazione di un prompt nella finestra di output

Fare nuovamente clic sull’icona della barra degli strumenti “Step into” step_into_netbeans_icon. La terza istruzione PHP viene eseguita e il programma attende che tu inserisca un valore. Posiziona il cursore all’interno della finestra “Output”, digita il valore 5 e premi il tasto “Invio Enter”.

Il contatore del programma passa alla quarta istruzione PHP. Se si torna alla finestra “Variabili” si può vedere che, al momento, due variabili ($a e $s) sono dichiarate nella memoria principale (RAM), come mostrato in Figura 7.

17

Figura 7 I valori delle variabili variables a e s s vengono visualizzati nella finestra Variabili

Fare clic due volte sull’icona della barra degli strumenti “Step into” step_into_netbeans_icon. Questa azione esegue la quarta e la quinta dichiarazione PHP. Posiziona il cursore all’interno della finestra “Output”, digita il valore 2 e premi il tasto “Invio Enter”.

Il contatore del programma passa alla sesta istruzione PHP. Se si torna alla finestra” Variabili ” si può vedere che, in questo momento, tre variabili ($a, $b e $s) sono dichiarate nella memoria principale (RAM) come mostrato in Figura 8.

18

Figura 8 I valori delle variabili $a, $b e $s vengono visualizzati nella finestra Variabili

Fare nuovamente clic sull’icona della barra degli strumenti “Step into” step_into_netbeans_icon. Viene eseguita l’istruzione $S = $a + $b. Quello che ti aspettavi qui era la somma di 5 e 2, che è 7, da assegnare alla variabile $s. Invece di questo, una nuova variabile $S viene dichiarata nella memoria principale (RAM) e ad essa viene assegnato il valore 7, come mostrato in Figura 9.

19

Figura 9 Tutte le variabili dichiarate vengono visualizzate nella finestra Variabili del debugger

Ora diventa più ovvio per te! Hai erroneamente dichiarato due variabili nella memoria principale (RAM), la variabile $s e la variabile $S con una S maiuscola. Quindi, quando il flusso di esecuzione passa all’ultima istruzione, echo "The sum is: ", $s viene visualizzato il valore 0 anziché il valore 7.

Hai appena trovato l’errore! Fare clic sull’icona della barra degli strumenti” Finish Debugger Session ” finish_debugger_netbeans per annullare l’esecuzione, correggere l’errore modificando la variabile $S in $s e si è pronti! Hai appena eseguito il tuo primo debug! Ri-eseguire lo script e ora vedrete che calcola e visualizza correttamente la somma.

Errori logici di debug aggiungendo punti di interruzione

Il debug passo dopo passo ha un grosso svantaggio. È necessario fare clic sull’icona della barra degli strumenti” Step into ” step_into_netbeans_icon ancora e ancora fino a raggiungere la posizione in cui potrebbe essere l’errore. Riesci a immaginarti di farlo in un grande script?

Per gli script di grandi dimensioni esiste un altro approccio. Se sospetti che l’errore si trovi da qualche parte alla fine dello script, non è necessario eseguire il debug di tutto fin dall’inizio. È possibile aggiungere un marker (chiamato “breakpoint”) in cui si pensa che l’errore potrebbe essere, eseguire lo script e quando il flusso di esecuzione raggiunge quel punto di interruzione, il flusso di esecuzione si interromperà automaticamente. È quindi possibile dare un’occhiata più da vicino ai valori correnti delle variabili nella posizione in cui lo script è stato messo in pausa.

Avviso: Quando lo script si interrompe, hai due opzioni per riprendere l’esecuzione: puoi aggiungere un secondo punto di interruzione da qualche parte sotto nello script, fare clic sull’icona della barra degli strumenti “Continua” continue_debug_toolbar e consentire allo script di continuare l’esecuzione fino a quel nuovo punto di interruzione; oppure, puoi semplicemente usare l’icona della barra degli strumenti “Step into” step_into_netbeans_icon ed eseguire lo script passo dopo passo.

Il prossimo script PHP richiede all’utente di inserire due valori e calcola il loro valore medio.

Tuttavia, lo script contiene un errore logico. Quando l’utente inserisce i valori 10 e 12, viene visualizzato il valore 16, anziché 11.

<?php echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $average = $a + $b / 2; echo "The average value is: ", $average;?>

Sospetti che il problema sia da qualche parte alla fine dello script. Tuttavia, non si desidera eseguire il debug dell’intero script, ma solo della parte in cui potrebbe essere l’errore. Quindi, proviamo ad aggiungere un punto di interruzione all’istruzione $average = $a + $b / 2 (vedi Figura 10). Ci sono due modi per farlo: è possibile fare clic sul margine grigio sinistro sul numero di riga corrispondente, oppure è possibile posizionare il cursore sulla linea di interesse e premere la combinazione di tasti CTRL+F8.

Figura 10 Aggiunta di un punto di interruzione a uno script

Avviso: Si sa che un punto di interruzione è stato impostato quando il rettangolo rosa ping_rectangle_netbeans appare nel margine grigio e la linea corrispondente ha sfondo rosa evidenziandolo.

Premi CTRL+MAIUSC+F5 per avviare il debugger. Fare clic sull’icona della barra degli strumenti” Continua ” continue_debug_toolbar e immettere i valori 10 e 12 quando richiesto. Noterai che subito dopo aver inserito il secondo numero e premuto il tasto” Invio Enter”, il flusso di esecuzione si interrompe al punto di interruzione. (Vedrai che l’evidenziazione del punto di interruzione rosa viene sostituita dall’evidenziazione verde del contatore del programma.)

Ricorda! È possibile eseguire il debug di un file selezionando “Debug Debug file” dal menu principale o premendo la combinazione di tasti CTRL+MAIUSC+F5.

Ora puoi dare un’occhiata più da vicino ai valori correnti delle variabili. Le variabili $a e $b contengono rispettivamente i valori 10 e 12, come dovrebbero, quindi non c’è nulla di sbagliato nell’input dei dati, come mostrato nella Figura 11.

21

Figura 11 Visualizzazione dei valori correnti di due variabili nella finestra Variabili

Fare clic sull’icona della barra degli strumenti “Step into” step_into_netbeans_icon una volta. L’istruzione $average = $a + $b / 2 viene eseguita e la memoria principale (RAM) ora contiene i seguenti valori (vedere Figura 12).

22

Figura 12 Visualizzazione dei valori correnti di tre variabili nella finestra Variabili

Eccolo! Hai appena trovato l’istruzione che assegna erroneamente un valore di 16, invece di 11, alla variabile $average! E ora arriva la parte difficile; si dovrebbe considerare perché questo accade!

Dopo due giorni di riflessione, diventa ovvio! Avevi appena dimenticato di racchiudere $a + $b tra parentesi; quindi, solo la variabile $b era divisa per 2. Fai clic sull’icona della barra degli strumenti” Finish Debugger Session ” finish_debugger_netbeans, rimuovi tutti i punti di interruzione, correggi l’errore racchiudendo $a + $b tra parentesi e sei pronto! Ri-eseguire lo script e vedere ora che calcola e visualizza correttamente il valore medio.

Leave a Reply

Il tuo indirizzo email non sarà pubblicato.