TOC

This article is currently in the process of being translated into Italian (~99% done).

Debug:

Stepping through the code

In questo capitolo esamineremo l'analisi del codice, che è un'altra parte essenziale del debug. A tale scopo, ho scritto questa semplice applicazione:

namespace DebugTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            a = a * 2;
            a = a - 3;
            a = a * 6;
            Console.WriteLine(a);
        }
    }
}

Si limita a manipolare la variabile "a" un paio di volte e a produrre il risultato finale. Provate a posizionare un punto di interruzione, come descritto nel capitolo precedente, sulla prima riga in cui viene utilizzata (e dichiarata) la variabile "a". Ora eseguite l'applicazione. L'esecuzione viene interrotta e si può passare il mouse sulla a, per verificare che quanto appreso nel capitolo precedente sia effettivamente vero: la variabile contiene solo il valore di default, perché il codice che assegna il valore (in questo caso 5) non è ancora stato eseguito, ma cambiamo questa situazione. Dal menu Debug, selezionate l'opzione "Passo successivo" o, meglio ancora, utilizzate la scorciatoia da tastiera F10. L'esecuzione passerà alla riga successiva e, passando il mouse sulla variabile a, si vedrà che ha un valore. Riprovate e vedrete che il valore cambia a seconda delle righe che vengono eseguite una per una, fino alla fine.

Ok, è stato abbastanza semplice, ma anche molto utile, come vi renderete conto una volta che inizierete a scrivere codice più complicato. In questo esempio, il flusso del codice era molto semplice, dal momento che siamo rimasti all'interno di una singola funzione, ma cosa succede se il codice inizia a diffondersi su più classi e/o funzioni? Prova con questo esempio:

namespace DebugTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            int b = 2;
            int result = MakeComplicatedCalculation(a, b);
            Console.WriteLine(result);
        }

        static int MakeComplicatedCalculation(int a, int b)
        {
            return a * b;
        }
    }
}

Posiziona un punto d'interruzione sulla prima riga del metodo principale ed esegui l'applicazione. Ora usa la funzione "Passo successivo" per passare attraverso ogni riga. Come vedrete, si muove sopra la chiamata di funzione senza alcun preavviso - che è semplicemente come funziona il debug. Ora, riprova, dall'inizio, e una volta che hai fatto un passo verso la linea con la chiamata MakeComplicatedCalculation(), seleziona Debug -> Entra, o usa la scorciatoia da tastiera F11. Il debugger ora entra nella prima possibile chiamata di funzione, permettendovi di entrare pure in quella funzione. Come potete immaginare, questo vi permette di passare attraverso un complicato blocco di codice, inserendo solo le chiamate alla funzione che vi interessa.

Se entrate in una funzione e poi vi rendete conto che si preferisce tornare al contesto precedente, si utilizza l'opzione, logicamente denominata, del menu di debug chiamata "Step out" (scorciatoia da tastiera è Shift F11). Questo ti riporterà al contesto precedente, il che ovviamente significa che puoi entrare in tutte le chiamate di funzione che vuoi, e poi trovare la strada del ritorno usando l'opzione step out.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!