Exercício - Registo e rastreio
Agora que o aplicativo começou a ser desenvolvido, é bom adicionar mais diagnósticos à lógica para ajudar os desenvolvedores à medida que adicionam novos recursos. Podemos usar nosso novo conhecimento de diagnóstico de depuração para realizar essa tarefa.
Gravar na consola de depuração
Antes de depurar a aplicação, vamos adicionar mais ferramentas de depuração. Diagnósticos adicionais ajudarão a diagnosticar o aplicativo enquanto ele está sendo executado em depuração.
Na parte superior do arquivo Program.cs, adicionaremos uma nova instrução using para trazer System.Diagnostics para que possamos usar os métodos Debug.
using System.Diagnostics;
Adicione uma instrução WriteLine no início do método Fibonacci para obter clareza ao depurar o código.
Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
Debug.WriteLine($"We are looking for the {n}th number");
No final do nosso ciclo de for, podíamos imprimir todos os valores. Também podemos usar uma instrução condicional de impressão usando WriteIf ou WriteLineIf para adicionar uma linha de saída somente quando sum for 1 no final do ciclo for.
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}");
}
Depure o aplicativo e você deve obter a seguinte saída:
Entering Fibonacci method
We are looking for the 5th number
sum is 1, n1 is 1, n2 is 1
Verifique as condições com o Assert
Em algumas situações, você pode querer parar todo o aplicativo em execução quando uma determinada condição não é atendida. Usando Debug.Assert, você pode verificar uma condição e produzir informações adicionais sobre o estado do aplicativo. Vamos adicionar uma verificação antes da declaração de retorno para garantir que n2 seja 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;
Nossa lógica de aplicação já está correta, então vamos atualizar nosso Fibonacci(5); para Fibonacci(6);, que terá um resultado diferente.
Depurar o aplicativo. Quando Debug.Assert é executado no código, o depurador para a aplicação para que você possa inspecionar variáveis, janela de monitorização, pilha de chamadas e muito mais. Ele também envia a mensagem para o console de depuração.
---- 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
Interrompa a depuração e, em seguida, execute a aplicação sem depurar inserindo o seguinte comando no terminal.
dotnet run
O aplicativo é encerrado depois que a asserção falhou e as informações foram registradas na saída do aplicativo.
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
Agora, vamos executar o aplicativo em Release configuração com o seguinte comando no terminal.
dotnet run --configuration Release
O aplicativo é executado com êxito até a conclusão porque não estamos mais na configuração Debug.
Parabéns, você depurou o código com sucesso e eficiência usando recursos do .NET, que incluem Debug.WriteLine e Debug.Assert. Muito bem!