Visual Studio Code

Comprendere E Risolvere I Primi Errori

Comprendere e risolvere i primi errori — Guida approfondita a Visual Studio Code.

Un messaggio di errore indica una fase del lavoro che non è riuscita. Per leggerlo bisogna distinguere l’editor, lo strumento richiamato e il programma in esecuzione. La posizione del messaggio e il momento in cui appare aiutano a individuare la causa.

Individuare la fase in cui compare il problema

Le fasi in cui individuare un errore: ambiente, file, compilazione, esecuzione e risultato
Prima di cambiare il codice, individua quale passaggio si è fermato.

Schema esplicativo originale creato per il capitolo.

Un comando non trovato è diverso da un errore di sintassi. Nel primo caso il programma potrebbe non essere stato letto affatto. Un errore di compilazione impedisce di produrre una nuova versione dell’eseguibile; un errore durante l’esecuzione avviene dopo che il programma è partito. Un risultato numerico sbagliato può invece comparire senza messaggi d’errore.

Quando comparePossibile categoriaPrimo elemento da leggere
Appena digiti il comandoAmbiente o PATHNome del comando e shell attiva
Lo strumento non trova il sorgentePercorso o nome fileCartella corrente e nome completo
Durante lettura o compilazioneSintassi o tipiFile, riga, prima diagnosi
Dopo l’avvioErrore di esecuzioneTipo di errore e stack trace
Il programma termina ma il risultato è erratoLogicaDati e operazioni effettuate

Torna all’indice della pagina

Il comando non viene riconosciuto

Messaggi come command not found, is not recognized o «termine non riconosciuto» provengono normalmente dalla shell. Le formulazioni cambiano con sistema e lingua. Indicano che la shell non riesce a risolvere quel nome come comando disponibile.

  1. Verifica il nome digitato, per esempio python3 anziché un nome non presente sul tuo sistema.
  2. Controlla di aver installato lo strumento esterno, non soltanto l’estensione di VS Code.
  3. Chiudi il terminale e creane uno nuovo dopo un’installazione; se necessario riavvia VS Code per ereditare il PATH aggiornato.
  4. Individua il programma che il sistema trova effettivamente.

Windows

In PowerShell:

Get-Command node
Get-Command gcc
Get-Command php

Usa il comando relativo al linguaggio interessato. In PowerShell where può essere un alias di altro genere: per il programma Windows usa esplicitamente where.exe node.

Linux

command -v node
command -v gcc
command -v php

L’assenza di un percorso richiede di verificare installazione e PATH.

macOS

command -v node
command -v clang
command -v php

La presenza dell’editor non implica che tutti questi strumenti siano installati.

Un percorso inatteso può rivelare due installazioni dello stesso strumento. Evita di modificare il PATH alla cieca: identifica prima la versione che vuoi usare e la cartella prevista dalle istruzioni del produttore.

Torna all’indice della pagina

Il file non viene trovato o è quello sbagliato

Un messaggio relativo a main.py, app.js o Main.java può indicare che il terminale si trova in un’altra cartella. L’Explorer di VS Code e il terminale sono collegati al progetto, ma un terminale già aperto mantiene la propria cartella di lavoro.

Windows

Get-Location
Get-ChildItem

Linux

pwd
ls

macOS

pwd
ls

Confronta il nome completo elencato con quello nel comando. Un file main.py.txt non coincide con main.py. Linux distingue normalmente maiuscole e minuscole; anche sugli altri sistemi è opportuno mantenere i nomi esatti per progetti portabili. Per Java il nome della classe pubblica e del sorgente deve comunque corrispondere.

Un nome contenente spazi deve essere racchiuso tra virgolette quando viene passato come argomento, per esempio python3 "primo programma.py". Le virgolette delimitano il percorso per la shell e non fanno parte del nome del file.

Controlla infine che il file sia stato salvato. L’interprete legge ciò che è sul disco: una modifica ancora nell’editor non è necessariamente la modifica che viene eseguita.

Torna all’indice della pagina

Leggere file, riga e messaggio senza correggere a caso

Molte diagnosi riportano un percorso, un numero di riga e talvolta una colonna. La riga segnalata è il punto in cui lo strumento ha rilevato il problema; la causa può trovarsi subito prima, per esempio una parentesi o una virgoletta non chiusa.

Un esempio volutamente incompleto in Python:

print("Ciao"

Manca la parentesi di chiusura. La forma corretta è:

print("Ciao")

In C o C++ una dichiarazione senza punto e virgola può produrre una diagnosi sulla riga successiva. Leggi il primo errore e le righe circostanti prima di intervenire su tutti i messaggi successivi: spesso sono conseguenze di un’unica interruzione della struttura del codice.

Il pannello Problems permette di raggiungere le posizioni indicate dalle analisi disponibili. Non contiene necessariamente ogni messaggio del compilatore lanciato a mano: alcuni strumenti richiedono un task con un problem matcher per trasferire le diagnosi in quel pannello. Mantieni visibile anche il terminale che ha eseguito il comando.

Torna all’indice della pagina

Distinguere avvisi, compilazione e collegamento

Un errore può impedire la compilazione. Un avviso segnala una situazione da esaminare, ma il suo effetto dipende dalle opzioni dello strumento: alcune configurazioni trattano gli avvisi come errori. Il colore di una sottolineatura nell’editor non basta a stabilire se l’eseguibile sia stato prodotto.

In C e C++ esiste anche il collegamento, che riunisce il codice compilato con le librerie necessarie. Un messaggio come undefined reference o unresolved external symbol può indicare che una definizione o una libreria manca nella fase di collegamento. Cambiare un punto e virgola non risolve automaticamente un problema di librerie.

  1. Leggi l’intero comando eseguito e il primo messaggio significativo.
  2. Individua se il problema riguarda il sorgente oppure il collegamento.
  3. Correggi il punto identificato e salva.
  4. Ricompila e osserva il nuovo esito prima di avviare il programma.
Se la compilazione fallisce, un vecchio programma.exe o programma può essere ancora presente nella cartella. Avviarlo mostra il comportamento della versione precedente e può dare l’impressione che la correzione non abbia effetto. Il file sorgente e l’eseguibile sono due oggetti distinti.

Torna all’indice della pagina

Comprendere gli errori durante l’esecuzione

Un programma può essere sintatticamente corretto ma fallire quando incontra dati o operazioni particolari. In Python, una divisione per zero può generare ZeroDivisionError; l’accesso a un nome non definito può generare NameError. Le eccezioni e il comportamento delle operazioni cambiano secondo il linguaggio e i tipi coinvolti.

Uno stack trace descrive la sequenza delle chiamate che ha portato all’errore. Individua il tipo di eccezione e una posizione appartenente al tuo codice. Le righe di libreria aiutano a comprendere il percorso, ma non vanno modificate soltanto perché compaiono nel messaggio.

Il debugger permette di interrompere l’esecuzione e osservare i valori prima dell’errore. Un breakpoint deve trovarsi su una riga eseguibile; con Step Over procedi alla successiva istruzione senza entrare normalmente nelle funzioni chiamate. Continue riprende fino al prossimo punto di arresto o alla fine.

Sessione di debug con variabili e punti di arresto
Il debugger mostra lo stato del programma sospeso. La sua disponibilità richiede il supporto e la configurazione del linguaggio usato.

Schermata Microsoft, documentazione VS Code. Fonte · CC BY 3.0 US. Riprodotta senza modifiche; versione e lingua possono differire dalla tua installazione.

Il debug sarà approfondito nei capitoli successivi. Qui serve riconoscere che il pannello Run and Debug osserva un processo e non sostituisce l’installazione del runtime, del compilatore o degli strumenti di debug.

Torna all’indice della pagina

Il programma termina ma il risultato non è quello previsto

Un errore logico può non produrre alcuna eccezione. Per calcolare il costo di tre articoli da dodici euro occorre moltiplicare prezzo e quantità. Se il programma li somma, può stampare correttamente il numero sbagliato:

const prezzo = 12;
const quantita = 3;
const totale = prezzo + quantita;
console.log(totale); // Stampa 15: il codice esegue una somma.

La correzione consiste nell’usare prezzo * quantita, che produce 36. L’editor non può sapere, in generale, quale operazione commerciale intendevi descrivere. Confronta dati di ingresso, operazione e risultato atteso.

Per capire il flusso, puoi osservare le variabili nel debugger oppure stampare temporaneamente i valori intermedi. Il testo stampato aiuta a localizzare il comportamento; non dimostra da solo che tutte le possibili condizioni siano corrette. Dopo la correzione salva e ripeti il percorso di compilazione o esecuzione appropriato.

Torna all’indice della pagina

Una procedura ordinata per risolvere il problema

  1. Raccogli il comando, il messaggio completo e la fase in cui compare.
  2. Controlla la cartella corrente, il nome del file e il salvataggio.
  3. Controlla lo strumento effettivo e la sua versione.
  4. Individua la prima diagnosi rilevante e la posizione nel tuo codice.
  5. Modifica la causa identificata, evitando correzioni simultanee non collegate.
  6. Salva, ricompila se necessario e osserva il nuovo risultato.

Per i linguaggi eseguiti nel browser, la console degli strumenti di sviluppo del browser ospita normalmente gli errori JavaScript. Per PHP servito attraverso HTTP, il terminale del server e la configurazione degli errori PHP determinano dove leggere le diagnosi. Per uno script eseguito nel terminale, parti dall’output di quel processo.

Se cerchi un messaggio nella documentazione, usa il testo preciso insieme al nome dello strumento e alla versione. Distingui le istruzioni per Windows, Linux e macOS e verifica che riguardino la stessa modalità: CLI, browser, ambiente virtuale o progetto compilato. Questa distinzione evita di applicare una soluzione valida in un ambiente diverso dal tuo.

Torna all’indice della pagina

Documentazione e approfondimenti