Ejercicio: Registro y seguimiento
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.
En la parte superior del archivo
Program.cs, agregue una nuevausinginstrucción para incluirSystem.Diagnosticsy poder usar los métodosDebug.using System.Diagnostics;Agregue instrucciones
WriteLineal principio del métodoFibonaccipara una mayor claridad al depurar el código.Debug.WriteLine($"Entering {nameof(Fibonacci)} method"); Debug.WriteLine($"We are looking for the {n}th number");Al final de nuestro
forbucle, podríamos mostrar cada valor. O bien, podríamos usar una instrucción de impresión condicional conWriteIfoWriteLineIf. Agregue una línea de impresión solo cuandosumsea 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}"); }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.