Exercício – Registro em log e rastreamento
Agora que o desenvolvimento do aplicativo foi iniciado, é bom incluir mais diagnósticos à lógica para ajudar os desenvolvedores à medida que eles acrescentam novos recursos. Podemos usar nosso novo conhecimento sobre diagnóstico de depurações para realizar essa tarefa.
Gravar no console de depuração
Antes de depurar o aplicativo, vamos incluir mais diagnósticos de depuração. Eles ajudarão a diagnosticar o aplicativo enquanto ele estiver sendo executado sob depuração.
Na parte superior do arquivo Program.cs
, adicionaremos uma nova instrução using
para inserir System.Diagnostics
e possibilitar o uso dos métodos de Debug
.
using System.Diagnostics;
Adicione uma instrução WriteLine
no início do método Fibonacci
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 loop for
, poderíamos imprimir cada valor. Também é possível usar uma instrução de impressão condicional usando WriteIf
ou WriteLineIf
para adicionar uma linha de impressão somente quando sum
for 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 e você deverá obter 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 Fibonacci(5);
para Fibonacci(6);
, que terá 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 depuração inserindo o comando a seguir no terminal.
dotnet run
O aplicativo é encerrado após a falha da asserção e o registro das informações 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, a depuração do código foi realizada com êxito e eficiência usando recursos do .NET, incluindo Debug.WriteLine
e Debug.Assert
. Muito bem!