Ejercicio: Registro y seguimiento

Completado

Ahora que la aplicación está iniciando el desarrollo, es conveniente agregar más diagnósticos a la lógica para ayudar a los desarrolladores a agregar nuevas características. Podemos usar nuestro nuevo conocimiento de los diagnósticos de depuración para realizar esta tarea.

Escritura en la consola de depuración

Antes de depurar la aplicación, vamos a agregar más diagnósticos de depuración. Diagnósticos adicionales pueden ayudar a diagnosticar la aplicación mientras se ejecuta en modo de depuración.

  1. En la parte superior del archivo Program.cs, agregue una nueva using instrucción para incluir System.Diagnostics y poder usar los métodos Debug.

    using System.Diagnostics;
    
  2. Agregue instrucciones WriteLine al principio del método Fibonacci para una mayor claridad al depurar el código.

    Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
    Debug.WriteLine($"We are looking for the {n}th number");
    
  3. Al final de nuestro for bucle, podríamos mostrar cada valor. O bien, podríamos usar una instrucción de impresión condicional con WriteIf o WriteLineIf. Agregue una línea de impresión solo cuando sum sea 1 al final del bucle "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}");    
    }
    
  4. Depure la aplicación. Debería obtener la salida siguiente:

    Entering Fibonacci method
    We are looking for the 5th number
    sum is 1, n1 is 1, n2 is 1
    

Comprobación de condiciones con Assert

En algunas situaciones, puede que quiera detener toda la aplicación en ejecución cuando no se cumpla una determinada condición. Mediante el uso de Debug.Assert, puede comprobar una condición y generar información adicional sobre el estado de la aplicación. Vamos a agregar una comprobación justo antes de la instrucción "return" para tener la seguridad de que n2 es 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;

Nuestra lógica de aplicación ya es correcta, por lo que vamos a actualizar nuestro Fibonacci(5); a Fibonacci(6);, lo que genera un resultado diferente.

Depure la aplicación. Cuando se ejecuta Debug.Assert en el código, el depurador detiene la aplicación para que pueda inspeccionar las variables, la ventana de inspección, la pila de llamadas, etc. También envía el mensaje a la consola de depuración.

---- 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

Detenga la depuración y, luego, ejecute la aplicación sin depurar escribiendo el siguiente comando en el terminal.

dotnet run

La aplicación se finaliza después de que se produzca un error en la aserción y la información se registra en la salida de la aplicación.

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

Ahora, vamos a ejecutar la aplicación en la configuración Release con el siguiente comando en el terminal:

dotnet run --configuration Release

La aplicación se ejecuta correctamente hasta su finalización, porque ya no estamos en la configuración Debug.

Enhorabuena, ha depurado código correctamente y eficazmente mediante características de .NET, que incluyen Debug.WriteLine y Debug.Assert. Buen trabajo.