Exercício – Registro em log e rastreamento
Agora que o aplicativo está iniciando o desenvolvimento, é 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 no console de depuração
Antes de depurar o aplicativo, vamos incluir mais diagnósticos de depuração. Diagnósticos adicionais podem ajudar a diagnosticar o aplicativo enquanto ele está sendo executado em depuração.
Na parte superior do
Program.csarquivo, adicione uma novausinginstrução para trazerSystem.Diagnosticspara que possamos usar osDebugmétodos.using System.Diagnostics;Adicione
WriteLineinstruções no início doFibonaccimétodo para obter clareza ao depurar por meio do código.Debug.WriteLine($"Entering {nameof(Fibonacci)} method"); Debug.WriteLine($"We are looking for the {n}th number");No final do nosso
forloop, poderíamos gerar todos os valores. Ou poderíamos empregar uma instrução de impressão condicional usandoWriteIfouWriteLineIf. Adicione uma impressão a uma linha somente quandosumfor 1 no final do loop.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. Você verá a seguinte saída:
Entering Fibonacci method We are looking for the 5th number sum is 1, n1 is 1, n2 is 1
Verificar condições com Assert
Em algumas situações, é indicado interromper todo o aplicativo em execução quando determinada condição não é atendida. O uso de Debug.Assert permite que você verifique uma condição e gere informações adicionais sobre o estado do aplicativo. Vamos adicionar uma verificação antes da instrução return 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 aplicativo já está correta, portanto, vamos atualizar o nosso Fibonacci(5); para Fibonacci(6);, que gera um resultado diferente.
Depure o aplicativo. Quando Debug.Assert é executado no código, o depurador interrompe o aplicativo para que você possa inspecionar as variáveis, a janela de inspeção, a pilha de chamadas e muito mais. Ele também gera 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 execute o aplicativo sem ela inserindo o comando a seguir no terminal.
dotnet run
O aplicativo é encerrado após a falha da asserção e as informações são 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 na configuração de Release com o comando a seguir no terminal.
dotnet run --configuration Release
O aplicativo é executado com êxito até a conclusão, pois não estamos mais na configuração de Debug.
Parabéns, você depurou com êxito e eficiência o código usando recursos do .NET, que incluem Debug.WriteLine e Debug.Assert. Muito bem!