You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/03-code-quality/01-debugging-chrome/article.md
+40-24Lines changed: 40 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
Prima di scrivere codice più complesso, dovremmo parlare di debugging.
4
4
5
-
[Debugging](https://en.wikipedia.org/wiki/Debugging) è il processo che prevede di trovare e sistemare gli errori all'interno di uno script. Tutti i browser moderni e molti altri ambienti forniscono strumenti per il debugging -- degli speciali strumenti che rendono il debugging un operazione più semplice. Consentono anche di seguire l'esecuzione del codice passo per passo, per capire esattamente cosa sta accadendo..
5
+
[Debugging](https://en.wikipedia.org/wiki/Debugging) è il processo che prevede la ricerca e la risoluzione degli errori all'interno di uno script. Tutti i browser moderni e molti altri ambienti forniscono strumenti per il debugging -- degli speciali strumenti che rendono il debugging un operazione più semplice. Consentono anche di seguire l'esecuzione del codice passo per passo, per capire esattamente cosa sta accadendo..
6
6
7
7
Noi useremo Chrome, poiché è probabilmente il più ricco di caratteristiche sotto questo aspetto.
8
8
@@ -28,7 +28,7 @@ Possiamo vedere tre zone:
28
28
29
29
1. La **zona Risorse** con la lista degli HTML, JavaScript, CSS e altri file, incluse le immagini che sono collegate alla pagina. Potrebbero apparire anche le estensioni di Chrome.
30
30
2. La **zona Sorgente** mostra il codice.
31
-
3. La **zona Informazione e controllo** utile per il debugging, la esplerermo meglio.
31
+
3. La **zona Informazione e controllo** utile per il debugging, la esploreremo meglio.
32
32
33
33
Ora puoi cliccare nuovamente lo stesso bottone <spanclass="devtools"style="background-position:-200px-76px"></span> per nascondere la lista risorse e dare più spazio al codice.
34
34
@@ -54,10 +54,10 @@ Dovrebbe apparire qualcosa di simile (in blu dove avreste dovuto cliccare):
54
54
55
55
Un *breakpoint* è un punto del codice in cui il debugger si metterà in pausa automaticamente durante l'esecuzione del codice JavaScript.
56
56
57
-
Mentre il codice è in pause, è possibile esaminare le variabili, eseguire comandi tramite la console etc. In altre parole, possiamo eseguire il debug.
57
+
Mentre il codice è in pausa, è possibile esaminare le variabili, eseguire comandi tramite la console etc. In altre parole, stiamo facendo debugging.
58
58
59
59
Possiamo anche visualizzare la lista dei breakpoint nel pannello di destra. Questo pannello può risultare utile quando abbiamo più breakpoint in file diversi. Infatti ci consente di:
60
-
-Salatare rapidamente ad un breakpoint (cliccando sopra al nome del breakpoint che ci interessa).
60
+
-Saltare rapidamente ad un breakpoint (cliccando sopra al nome del breakpoint che ci interessa).
61
61
- Disabilitare temporaneamente un breakpoint semplicemente togliendo la spunta.
62
62
- Rimuovere breakpoint cliccando con il tasto destro e selezionando Rimuovi.
63
63
- ...E molto altro.
@@ -77,35 +77,35 @@ function hello(name) {
77
77
let phrase =`Hello, ${name}!`;
78
78
79
79
*!*
80
-
debugger; // <-- il debugger si ferma qui
80
+
debugger; // <-- il codice si metterà in pausa qui
81
81
*/!*
82
82
83
83
say(phrase);
84
84
}
85
85
```
86
86
87
-
Questo risulta molto utile quando stiamo lavorando in un editor e non vogliamo passare alla finestra del browser, cercare il punto corretto nello script interessato e settare il breakpoint.
87
+
Questo risulta molto utile quando stiamo lavorando in un editor e non vogliamo passare alla finestra del browser, cercare il punto corretto nello script interessato e impostare il breakpoint.
88
88
89
89
90
-
## Pausa per guardarsi attorno
90
+
## Interrompere l'esecuzione e guardarsi intorno
91
91
92
92
Nel nostro esempio, `hello()` viene richiamato durante il caricamento della pagina, quindi il metodo più facile per attivare il debugger è ricaricare la pagina. Quindi premete `key:F5` (Windows, Linux) o `key:Cmd+R` (Mac).
93
93
94
94
Con il breakpoint impostato, l'esecuzione si fermerà alla quarta linea:
95
95
96
96

97
97
98
-
Ora aprite i menu a cascata (quelli con la freccetta accanto al nome). Vi consentiranno di esaminare lo stato corrente del codice:
98
+
Ora aprite il menu a cascata (quello con la freccetta accanto al nome). Ti consentirà di esaminare lo stato corrente del codice:
99
99
100
100
1.**`Watch` -- mostra il valore corrente per ogni espressione.**
101
101
102
102
Puoi cliccare su `+` e inserire un espressione. Il debugger ti mostrerà il suo valore ad ogni istante, che verrà automaticamente ricalcolato durante l'esecuzione.
103
103
104
104
2.**`Call Stack` -- mostra la catena delle chiamate annidate.**
105
105
106
-
Attualmente il debugger si trova all'interno della chiamata `hello()`, chiamata da uno script interno a `index.html` (non ci sono funzioni qui, quindi viene definito "anonimo").
106
+
Attualmente il debugger si trova all'interno della chiamata `hello()`, chiamata da uno script interno a `index.html` (non ci sono funzioni qui, quindi viene definita "anonima").
107
107
108
-
Se premi su un elemento della pila, il debugger salterà al codice corrispondente, e potranno essere esaminate tutte le variabili.
108
+
Se premi su un elemento della pila, il debugger salterà al codice corrispondente, e potrai esaminare tutte le variabili.
109
109
3.**`Scope` -- variabili correnti.**
110
110
111
111
`Local` mostra le variabili locali alla funzione. Potente anche vedere i valori evidenziati nel codice.
@@ -120,29 +120,45 @@ Ora è il momento di *tracciare* lo script.
120
120
121
121
Ci sono dei bottoni appositi nella parte superiore del pannello di destra. Proviamo ad attivarli.
: Riprende l'esecuzione. Se non ci sono ulteriori breakpoint l'esecuzione continua e il debugger non avrà più il controllo.
125
125
126
-
Questo e quello che vedremo dopo aver cliccato:
126
+
Questo è quello che vedremo dopo aver cliccato:
127
127
128
128

129
129
130
-
L'esecuzione è ripartita, ha incontrato un altro breakpoint dentro `say()` e si è fermato nuovamente. Diamo un'occhiata al "Call stack" sulla destra. E' stato incrementato con un ulteriore chiamata. Ora siamo all'interno di `say()`.
130
+
L'esecuzione è ripartita, ha incontrato un altro breakpoint dentro `say()` e si è fermata nuovamente. Diamo un'occhiata al "Call stack" sulla destra. E' stato incrementato con un ulteriore chiamata. Ora siamo all'interno di `say()`.
131
131
132
-
<spanclass="devtools"style="background-position:-137px-76px"></span> -- fa un singolo step (esegue il comando successivo), ma non *entra nella funzione*, tasto `key:F10`.
133
-
: Se lo clicchiamo ora, verrà mostrato `alert`. La cosa importante è che `alert` potrebbe essere una funzione qualsiasi, l'esecuzione farebbe "uno step oltre" comunque, saltando l'interno della funzione.
132
+
<spanclass="devtools"style="background-position:-200px-190px"></span> -- "Step": esegue il prossimo comando, hotkey `key:F9`.
133
+
: Esegue la prossima istruzione. Se lo clicchiamo, verrà mostrato l'`alert`.
134
+
135
+
Continuando a cliccare eseguiremo lo script un passo per volta.
136
+
137
+
<spanclass="devtools"style="background-position:-62px-192px"></span> -- "Step over": esegue il prossimo comando, ma *non entra nella funzione*, hotkey `key:F10`.
138
+
: Molto simile al comando "Step", ma si comporta diversamente nel caso in cui la prossima istruzione sia una chiamata a funzione. Cioè: non una funzione built-in come `alert`, ma una funzione definita da noi.
139
+
140
+
Il comando "Step" entra nella funzione e mette in pausa l'esecuzione, mentre "Step over" esegue la chiamata a funzione, saltandone il contenuto.
141
+
142
+
L'esecuzione viene interrotta al termine della chiamata.
143
+
144
+
Questo è molto utile se non siamo interessati nel vedere cosa accade dentro la funzione.
134
145
135
146
<spanclass="devtools"style="background-position:-72px-76px"></span> -- fai uno step, tasto `key:F11`.
136
147
: Lo stesso di quello precedente, ma fa "un passo all'interno" della funzione. Cliccando qui è possibile avanzare uno step alla volta tutte le azioni dello script.
137
148
138
-
<spanclass="devtools"style="background-position:-104px-76px"></span> -- continua l'esecuzione fino alla fine della funzione corrente, tasto `key:Shift+F11`.
139
-
: L'esecuzione si fermerà all'ultima linea della funzione corrente. Questa funzione è comoda quando entriamo per sbaglio in una funzione annidata usando <spanclass="devtools"style="background-position:-72px-76px"></span>, ma non siamo interessati, e vogliamo arrivare alla fine di questa il più velocemente possibile.
: Molto simile a "Step", ma si comporta in maniera differente nel caso di chiamate a funzioni asicncrone. Se state ancora imparando JavaScript, allora potete ignorare la differenza, visto che non andremo ad utilizzare funzioni asincrone per ora.
151
+
152
+
Per il futuro, ricordatevi che "Step" ignora le funzioni asincrone, come ad esempio `setTimeout` (chiamata programmata di funzione). Invece "Step into" accede a questo tipo di funzioni, ed attende quanto necessario. Fate riferimento al [manuale DevTools](https://developers.google.com/web/updates/2018/01/devtools#async) per maggiori dettagli.
153
+
154
+
<spanclass="devtools"style="background-position:-32px-194px"></span> -- "Step out": continua l'esecuzione fino alla fine della funzione corrente, hotkey `key:Shift+F11`.
155
+
: Continua l'esecuzione e la interrompe all'ultima linea della funzione corrente. Questo comando risulta essere utile nel caso in cui entrassimo accidentalmente in una chiamata annidata utilizzando <spanclass="devtools"style="background-position:-200px-190px"></span>, ma non siamo interessati alla sua esecuzione, e vogliamo arrivare al termine della sua esecuzione il prima possibile.
140
156
141
157
<spanclass="devtools"style="background-position:-7px-28px"></span> -- attiva/disattiva tutti i breakpoint.
142
158
: Questo bottone non influenza l'esecuzione. E' semplicemente un on/off per i breakpoint.
143
159
144
160
<spanclass="devtools"style="background-position:-264px-4px"></span> -- attiva/disattiva la pausa automatica in caso di errori.
145
-
: Quando attiva, e il pannello degli strumenti svilupattore è aperto, un errore nello script metterà automaticamente in pausa l'esecuzione. Cosi potremmo analizzare le variabili per capire cosa è andato storto. Quindi se il nostro script si blocca con un errore, possiamo aprire il debugger, attivare questa opzione e ricaricare la pagina per veder dove si blocca lo script e capirne il motivo.
161
+
: Quando questa opzione è attiva, e il pannello degli strumenti sviluppatore è aperto, un errore nello script metterà automaticamente in pausa l'esecuzione. Cosi potremmo analizzare le variabili per capire cosa è andato storto. Quindi se il nostro script si blocca con un errore, possiamo aprire il debugger, attivare questa opzione e ricaricare la pagina per vedere dove si blocca lo script e capirne il motivo.
146
162
147
163
```smart header="Continua fino a qui"
148
164
Premendo tasto destro su una riga di codice si aprirà un menu con una bellissima opzione denominata "Continua fino a qui".
@@ -152,7 +168,7 @@ Questa è molto utile quando vogliamo muoverci di più passi, ma siamo troppo pi
152
168
153
169
## Logging
154
170
155
-
Per stampare qualcosa sulla console, c'è una funzione `console.log`.
171
+
Per stampare qualcosa sulla console, possiamo utilizzare la funzione `console.log`.
156
172
157
173
Ad esempio, questo stamperà i valori da `0` a `4` sulla console:
158
174
@@ -163,13 +179,13 @@ for (let i = 0; i < 5; i++) {
163
179
}
164
180
```
165
181
166
-
Gli utenti normali non vedranno questo output poiché viene mostrato in console. Per vederlo dovrebbe aprire il menu Console degli strumenti sviluppatore, oppure premere `key:Esc` mentre si trova in un altro tab: questo tasto aprirà la console nella parte inferiore della schermata.
182
+
Gli utenti normali non vedranno questo output poiché viene mostrato in console. Per vederlo dovrebbero aprire il menu `Console` degli strumenti sviluppatore, oppure premere `key:Esc` mentre si trovano in un altro tab: questo tasto aprirà la console nella parte inferiore della schermata.
167
183
168
-
Se abbiamo abbastanza log nel nostro codice, possiamo vedere cosa sta accadendo anche senza utilizzare il debugger.
184
+
Utilizzando la funzione `console.log` nel nostro codice, possiamo vedere cosa sta accadendo anche senza utilizzare il debugger.
169
185
170
186
## Riepilogo
171
187
172
-
Come abbiamo visto, ci sono tre diversi modi di metter in pausa uno script:
188
+
Come abbiamo visto, ci sono tre diversi modi di mettere in pausa uno script:
173
189
1. Un breakpoint.
174
190
2. L'istruzione `debugger`.
175
191
3. Un errore (solo se gli strumenti sviluppatore sono aperti ed è attivo il bottone <spanclass="devtools"style="background-position:-264px-4px"></span>)
@@ -178,6 +194,6 @@ Cosi possiamo esaminare le variabili e capire cosa è andato male durante l'esec
178
194
179
195
Ci sono veramente troppe opzioni negli strumenti da sviluppatore per coprirle qui. Il manuale completo è disponibile all'indirizzo <https://developers.google.com/web/tools/chrome-devtools>.
180
196
181
-
Le informazioni fornite da questo capitolo sono sufficienti per iniziare a fare un pò di debug, anche se più avanti, specialmente quando farete cose più avanzate, seguite il link sopra e consultate il manuale per ulteriori informazioni.
197
+
Le informazioni fornite da questo capitolo sono sufficienti per iniziare a fare un po' di debug, anche se più avanti, specialmente quando farete cose più avanzate, il link sopra potrà tornarvi utile.
182
198
183
-
Ah, inoltre potete anche cliccare i vari bottoni negli strumenti da sviluppatore e vedere cosa succede. E' probabilmente il metodo più rapido per imparare tutto. Non dimenticate che molte opzini sono disponibili anche con il click del tasto destro!
199
+
Ah, inoltre potete anche cliccare i vari bottoni negli strumenti da sviluppatore e vedere cosa succede. E' probabilmente il metodo più rapido per imparare. Non dimenticate che molte opzioni sono disponibili anche con il click del tasto destro!
0 commit comments