Exercício – Registro em log e rastreamento

Concluído

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.

  1. Na parte superior do Program.cs arquivo, adicione uma nova using instrução para trazer System.Diagnostics para que possamos usar os Debug métodos.

    using System.Diagnostics;
    
  2. Adicione WriteLine instruções no início do Fibonacci mé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");
    
  3. No final do nosso for loop, poderíamos gerar todos os valores. Ou poderíamos empregar uma instrução de impressão condicional usando WriteIf ou WriteLineIf. Adicione uma impressão a uma linha 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}");    
    }
    
  4. 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!