Esercizio: Registrazione e analisi

Completato

Dopo aver iniziato lo sviluppo dell'applicazione, è consigliabile aggiungere altre attività di diagnostica alla logica per aiutare gli sviluppatori ad aggiungere nuove funzionalità. Per eseguire questa attività, è possibile usare la nuova conoscenza della diagnostica di debug.

Scrivere nella Console di debug

Prima di eseguire il debug dell'applicazione, aggiungere ulteriore diagnostica di debug. La diagnostica aggiuntiva consente di diagnosticare l'applicazione mentre è in esecuzione in fase di debug.

Nella parte superiore del file Program.cs viene aggiunta una nuova istruzione using da inserire in System.Diagnostics in modo che sia possibile usare i metodi Debug.

using System.Diagnostics;

Aggiungere un'istruzione WriteLine all'inizio del metodo Fibonacci per ottenere chiarezza quando si esegue il debug del codice.

Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
Debug.WriteLine($"We are looking for the {n}th number");

Alla fine del ciclo for è possibile stampare ogni valore. È anche possibile usare un'istruzione di stampa condizionale utilizzando WriteIf o WriteLineIf per aggiungere una riga di stampa solo quando sum è 1 alla fine del ciclo per:

for (int i = 2; i <= n; i++)
{                  
    sum = n1 + n2;
    n1 = n2;
    n2 = sum;
    Debug.WriteLineIf(sum == 1, $"sum is 1, n1 is {n1}, n2 is {n2}");    
}

Eseguire il debug dell'applicazione e ottenere l'output seguente:

Entering Fibonacci method
We are looking for the 5th number
sum is 1, n1 is 1, n2 is 1

Verificare la presenza di condizioni con Assert

In alcune situazioni è possibile che si voglia interrompere l'esecuzione dell'applicazione quando non viene soddisfatta una determinata condizione. L'uso di Debug.Assert consente di verificare la presenza di una condizione e di restituire informazioni aggiuntive sullo stato dell'applicazione. Aggiungere un controllo prima dell'istruzione return per verificare che n2 sia 5.

// If n2 is 5 continue, else break.
Debug.Assert(n2 == 5, "The return value is not 5 and it should be.");
return n == 0 ? n1 : n2;

Poiché la logica dell'applicazione è già corretta, aggiornare Fibonacci(5); a Fibonacci(6); e si otterrà un risultato diverso.

Eseguire il debug dell'applicazione. Quando Debug.Assert viene eseguito nel codice, il debugger arresta l'applicazione per consentire di controllare le variabili, la finestra Espressioni di controllo, lo stack di chiamate e altro ancora. Restituisce anche il messaggio nella Console di debug.

---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
The return value is not 5 and it should be.
---- Assert Long Message ----

   at Program.<<Main>$>g__Fibonacci|0_0(Int32 n) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 23
   at Program.<Main>$(String[] args) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 3

Arrestare il debug e quindi eseguire l'applicazione senza il debug immettendo il comando seguente nel terminale.

dotnet run

L'applicazione viene terminata dopo che l'asserzione non è riuscita e le informazioni sono state registrate nell'output dell'applicazione.

Process terminated. Assertion failed.
The return value is not 5 and it should be.
   at Program.<<Main>$>g__Fibonacci|0_0(Int32 n) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 23
   at Program.<Main>$(String[] args) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 3

Eseguire ora l'applicazione nella configurazione Release con il comando seguente nel terminale.

dotnet run --configuration Release

L'applicazione viene eseguita correttamente fino al completamento poiché non viene più usata la configurazione Debug.

Il debug del codice è stato eseguito correttamente e in modo efficiente usando le funzionalità di .NET, tra cui Debug.WriteLine e Debug.Assert. le due dipendenze nell'app.