Oppure

Loading

Nei capitoli precedenti ho esposto alcuni strumenti da usare durante la scrittura del sorgente, ma una volta scritto, bisogna testarlo ed elimiare i bug, gli errori del programma. Questa operazione si dice debugging (dall'inglese de-bug).

Finestra degli errori

Il componente più importante che si ha a disposizione è la finestra degli errori, nella quale vengono visualizzati tutti gli errori, gli warning e i messaggi. Prima di proseguire bisogna fare una distinzione tra le tre tipologie di notifiche esistenti:

  • Errori : sono errori tutte le espressioni incomplete, l'incongruenza dei tipi dati con quelli richiesti, la mancanza di identificatori, la scrittura errata di un'istruzione, eccetera... Gli errori non permettono all'applicazione di correre in modo sicuro e portano nel 100% dei casi a un crash del programma. Il compilatore riesce ad individuare in modo semplice tutti quelli basati sulla sintassi, poiché si tratta semplicemente di confrontare schemi predefiniti con strutture date. Tutti gli errori vengono sottolineati in viola
  • Warning : sono delle "avvertenze", percorsi di esecuzione che potrebbero condurre a un errore o a un loop, o semplicemente segnalazioni di metodi obsoleti o di variabili inutilizzate. Scovare questo tipo di aberrazioni nel codice è meno semplice e presuppone il cercare di considere un'evenienza e capire come il codice fluirà durante l'esecuzione. Il compilatore può individuare ad esempio che in una funzione, non tutti i percorsi di codice conducono a un risultato, oppure che un metodo richiama se stesso in un loop ricorsivo. Tutti gli warning vengono sottolineati in verde
  • Messages : semplici messaggi del compilatore. Praticamente sempre assenti

Si può abilitare/disabilitare la visualizzazione di errori, warning o messaggi cliccando sul nome. Nella lista è possibile raggiungere con un click su un elemento il punto del codice che ha generato l'errore.

Breakpoint

I breakpoint sono punti in cui il programma si ferma, si mette in "pausa", mantenendo però i valori di tutte le variabili, per consentire al programmatore di studiare cosa sta avvenendo all'interno dell'applicazione. Questo permette di scovare molti tipi di errori, sia di valore, sia di logica. Per attivare un breakpoint, basta cliccare col mouse sul margine sinistro dell'editor di codice, nella parte grigia. La riga selezionata verrà evidenziata e sarà posto un pallino rosso di fianco. Quando il codice arriva a quel punto, si ferma prima di eseguire la riga selezionata e va in pausa, portando in primo piano il sorgente in questione ed evidenziandolo in giallo. Una volta giunti a questo punto, si può controllare il valore di ogni variabile semplicemente posizionandovi sopra il mouse per alcuni decimi di secondo. Ecco come potrebbe apparire una schermata in pausa:

Breakpoint.jpg
In questo modo è possibile analizzare l'origine di ogni problema o comportamento strano. Se i valori delle variabili sono di tipo stringa e sono anche piuttosto lunghi è possibile, con un doppio click sulla lente d'ingrandimento, visualizzarli in una finestra separata. Il compilatore predispone anche due modalità di visualizzazione alternative: XML e HTML. Entrambe sono attivabili dal menù a discesa accessibile cliccando sulla freccetta in giù vicino alla lente (al fianco di ogni stringa).
Inoltre, c'è un modo per aggiungere breakpoint da codice. Consiste nell'utilizzare la keyword Stop. Ad esempio:

'...
If I = 50 Then
    Stop
End If 

 

Finestra Watch

Quando l'applicazione è in pausa, in basso a destra (usualmente), si apre una finestra che contiene i valori delle variabili in gioco. È divisa in tre schede: la prima, Auto, contiene le variabili presenti sul breakpoint e quelle locali; la seconda, Local, contiene solo le variabili locali; la terza, Watch, contiene le variabili il cui valore è stato forzatamente fatto analizzare dal programmatore. Per aggiungere una variabile alla lista Watch bisogna trovarsi prima di tutto in modalità pausa, quindi si clicca con il pulsante destro del mouse sulla variabile in questione e si sceglie "Add watch". Da questo momento in poi, ogni cambiamento della variabile verrà registrato e monitorato, anche in pezzi di codice al di fuori del blocco in cui essa si trova. C'è anche un altro modo per ottenere dei valori prima di un breakpoint, ossia la finestra Debug.

Finestra Debug

La finestra Debug è anche nota come Immediate Window ed è visibile solo in pausa, selezionando l'opportuna scheda nell'angolo in basso a destra. Al suo interno ci si può scrivere di tutto, qualsiasi informazione utile al debugging. Infatti si usa l'oggetto singleton Debug come se fosse un oggetto Console, e l'output viene scritto, appunto, sulla finestra. Ad esempio:

Module Module1
    Sub Main()
        Dim P As New Person("Pinco", "Pallino", New Date(2008, 1, 1))
        '...

        Debug.WriteLine("Nome completo: " & P.CompleteName)
        'Si possono scrivere messaggi solo se vige una certa condizione
        Debug.WriteLineIf(P.BirthDay > New Date(2007, 9, 27), _
            "Data di nascita posteriore al 27/9/2007")

        If P IsNot Nothing Then
            Stop
        End If

        Console.ReadKey()
    End Sub
End Module 


BreakpointStop.jpg

A cura di: Il Totem