Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Debugging: consigli utili

Le modalità xtrace e verbose della shell di Bash: imparare a conoscerle ed utilizzarle, insieme al comando echo, per scovare i bug di uno script su Linux.
Le modalità xtrace e verbose della shell di Bash: imparare a conoscerle ed utilizzarle, insieme al comando echo, per scovare i bug di uno script su Linux.
Link copiato negli appunti

Gli strumenti che abbiamo introdotto finora ci permettono di creare script anche molto complessi, e perciò saremo sempre più esposti a commettere errori di ogni genere. Il debugging è quindi un'attività molto importante per ogni programmatore, e inizia dal saper leggere con attenzione i messaggi di errore (se ne abbiamo ottenuto uno). Tuttavia i messaggi di errore prodotti da Bash sono spesso molto criptici, anche se dovuti a semplici errori di sintassi, che non sempre sono di facile individuazione. Per questo è bene conoscere alcuni piccoli accorgimenti che possono aiutarci a scovare i bug in maniera più agile e veloce, risparmiando tempo ed energie.

Esistono due modalità offerte da Bash per l'esecuzione di uno script, che possono aiutare a scoprire facilmente gli errori: la modalità verbose e quella xtrace. La prima si attiva aggiungendo l'opzione -v quando si esegue uno script (ad esempio sh -v script.sh); in questa modalità, ogni comando viene stampato (nel canale stderr) così come deve essere eseguito, prima di effettuare ogni singola espansione. La seconda modalità - di gran lunga più utile - si attiva aggiungendo l'opzione -x. In modalità xtrace, Bash stampa (sempre nel canale stderr) ogni comando come è stato eseguito dopo ogni espansione, indicando inoltre il livello di ogni subshell in cui è stato eseguito (utilizzando il prefisso + per ciascuna di esse).

Vediamo un semplice esempio: lo script bug.sh di seguito riportato genera un errore.

#!/bin/bash
hello="hello world"
[ $hello = hello ]

Eseguendo sh -x bug.sh possiamo facilmente individuarne la causa:

$ sh -x bug.sh
+ hello='hello world'
+ '[' hello world = hello ']'
bug.sh: line 3: [: too many arguments

Il comando test infatti riconosce hello e world come due parole separate; abbiamo quindi dimenticato di racchiudere la variabile $hello fra virgolette, come si nota dalla sua espansione effettuata da Bash.

La creazione di uno script - così come più in generale la programmazione - è un processo incrementale, che consiste nel procedere aggiungendo pezzo per pezzo nuove funzioni e comandi ad un'applicazione esistente, verificandone progressivamente il funzionamento. Non è quindi frequente il caso in cui si debba effettuare il debug di uno script per intero, ma solo piccoli componenti che si vanno via via ad aggiungere. In Bash possiamo attivare sia la modalità xtrace che quella verbose solo in alcune porzioni del codice, utilizzando il comando set: una volta specificato set -x (rispettivamente -v), ogni comando successivo verrà eseguito in modalità xtrace (rispettivamente verbose), fino a quando non si giunge al termine dello script o ad un comando set +x (rispettivamente +v).

Le modalità offerte da Bash per il debugging sono da utilizzare come pratici meccanismi per una più facile individuazione degli errori, ma non sono comunque l'unica tecnica da dover usare. L'uso del comando echo per controllare il contenuto di variabili, posizionato strategicamente all'interno di uno script, è spesso una soluzione più che valida per individuare malfunzionamenti. Comunque sia, in attività come la programmazione o il debugging, la pratica è ciò che permette di definire la strategia che ciascuno trova migliore e più efficiente per le proprie esigenze.

Ti consigliamo anche