Esercizio: Registrazione e analisi
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.