Debug, Log e Trascrizione esecuzione
Identificare e risolvere gli errori in Google Apps Script con il debug e gli altri strumenti
Non importa il livello di esperienza che uno ha nella programmazione, commettere errori durante la scrittura del codice è inevitabile!
Tuttavia, che siano errori causati dalla fretta, dalla distrazione o dalla mancanza di visione completa del progetto esiste sempre un modo per scovarli e poterli correggere.
In generale esistono 3 tipologie di errore, gli errori di sintassi, gli errori logici e gli errori di semantica:
- errori sintattici: si verificano quando viene commesso un errore nella scrittura di un'istruzione non prevista dal linguaggio di programmazione;
- errori logici: si verificano quando il programma, durante la sua esecuzione, incontra delle eccezioni;
- errori semantici: si verificano quando il programma restituisce un risultato incoerente a quello atteso o si comporta in modo inaspettato.
I primi due sono facili da individuare in quanto sono segnalati dall'editor dell'ambiente di sviluppo, i terzi invece, in base al loro grado di annidamento, possono richiedere analisi del codice approfondite.
Per descrivere come sia possibile identificare e risolvere gli errori negli script in Google Apps Script ho messo a punto un semplice esempio, di per se fine a se stesso, che aiuta a descrivere facilmente come comportarsi di fronte alle situazioni di errore appena descritte.
Quello che dovrebbe effettuare il seguente codice è creare un array di parole da una stringa ed inviare una mail con l'indicazione della dimensione di tale array ad un indirizzo di destinazione previo controllo dell'integrità del relativo formato:
function controllaMail(email_address) {
if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email_address)) {
return true;
}
return false;
}
function inviaMail(email_address, email_subject, email_message) {
var chkmail = controllaMail(email_address);
if (chkmail) {
MailApp.sendEmail(email_address, email_subject, email_message);
return "mail inviata"
}
return "mail non inviata"
}
function avvioFunzione() {
var my_var = "appsscript.it augura a tutti una buona giornata";
var array = my_var.split(" ";
var array_len = array.length;
var email_address = "nome.cognome@.email.it";
var email_subject = "Risultato";
var email_message = "La lunghezza dell'array è: " + array_len;
var response = inviaMail(email, email_subject, email_message);
Logger.log(response);
}
Riportando il codice nell'editor di script di Google Apps Script e provando a salvarlo, verrà evidenziato subito un messaggio di errore, in una barra rossa in alto allo schermo, che cita ") mancante dopo l'elenco di argomenti" (Fig. 1). Questo tipo di errore, facile da individuare e correggere (sia perchè la riga dell'errore viene evidenziata sia perchè la causa dell'errore viene mostrata nel messaggio a video), può essere definito errore di sintassi e non permette il salvataggio del codice fino a che non è stato corretto:
Basterà pertanto aggiungere una parentesi tonda di chiusura alla fine dell'istruzione indicata nel messaggio di errore:
// Genera un errore di sintassi al momento del salvataggio del file:
// ) mancante dopo l'elenco di argomenti
var array = my_var.split(" ";
Questa anomalia era facilmente identificabile a priori da un occhio più attento in quanto all'interno dell'editor la colorazione delle istruzioni successive alla riga incriminata (vedere ad esempio le dichiarazioni delle variabili) non era coerente con il resto delle colorazioni proprio perchè la mancanza della parentesi di chiusura creava al compilatore ambiguità di interpretazione del codice successivo.
Corretta l'incongruenza diventa possibile salvare il codice.
Provando ad eseguire ora lo script, tramite avvioFunzione(), verrà restituito un altro errore sempre all'interno della barra rossa in alto allo schermo, che cita "ReferenceError: "email" non definito" (Fig. 2). Questo tipo di errore, che come il precedente è facile da individuare e correggere (anche in questo caso viene evidenziata la riga incriminata ed indicata la causa dell'errore), può essere definito come errore logico in quanto viene restituito dall'ambiente solo dopo che l'eccezione è stata incontrata durante l'esecuzione del codice.
Nel caso specifico la variabile "email", passata alla funzione, non è stata precedentemente definita pertanto nel momento in cui viene richiamata la funzione in questione si genera un'eccezione dovuta a tale variabile che non ha ne tipo ne contenuto:
// Genera un errore di esecuzione al momento dell'avvio del codice:
// ReferenceError: "email" non definito
var email_address = "nome.cognome@.email.it";
var email_subject = "Risultato";
var email_message = "La lunghezza dell'array è: " + array_len;
var response = inviaMail(email, email_subject, email_message);
La soluzione è quella di definire la viaribile "email" oppure, nel caso del codice di esempio in questione, sostituirla con la relativa variabile già presente allo scopo, "email_address".
Gli errori logici sono mostrati anche in Trascrizione esecuzione, che è una finestra di log apribile dal menu "Visualizza -> Trascrizione esecuzione" che in questo caso apparirebbe come segue...
Queste e molte altre informazioni su come identificare e risolvere gli errori in Google Apps Script continuano nel mio libro "Punta in alto con... Google Apps Script" (gli script sono scaricabili, funzionanti e liberamente utilizzabili nelle proprie applicazioni):
Troverai altre informazioni sul debug di Apps Script come:
- l'esempio completo su errori sintattici, logici e semantici sul quale effettuare i propri test;
- debug, log e trascrizione esecuzione;
- gli strumenti, dettagliati icona per icona, per scovare gli errori più insidiosi;
- i breakpoint;
- esecuzione di istruzioni e routine;
- stackdriver logging e stackdriver error reporting;
- tutta una serie di informazioni utili con immagini chiare ed esemplificative.
...E QUESTO È SOLO QUANTO RIFERITO ALL'IDENTIFICAZIONE DI ERRORI E ALL'USO DEL DEBUG DI APPS SCRIPT!
ACQUISTA ORA IL LIBRO SU AMAZON:
Se sei pronto a diventare un esperto nella programmazione in Google Apps Script non posso fare altro che augurarti una buona lettura e soprattutto... Buon divertimento!
INDOVINELLO!
A dire il vero all'interno del codice di esempio utilizzato in questo articolo è presente un altro errore fin'ora non descritto. Non è un errore bloccante in questo contesto ma sicuramente a livello concettuale, nonostante la sua banalità, è un'imprecisione che sarebbe opportuno correggere.
Se lo trovate lasciate un commento qui sotto!
Non ci sono commenti
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
scrivi un commento