Ejercicio: Registro y seguimiento
Ahora que se ha iniciado el desarrollo de la aplicación, es conveniente agregar más diagnósticos a la lógica para ayudar a los desarrolladores a medida que agregan 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. Esto le ayudará a diagnosticar la aplicación mientras se ejecuta durante la depuración.
En la parte superior del archivo Program.cs
, agregaremos una nueva instrucción using
para incorporar System.Diagnostics
de forma que podamos usar los métodos Debug
.
using System.Diagnostics;
Agregue una instrucción 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");
Al final de nuestro bucle for
, podríamos imprimir cada valor. También podemos usar una instrucción de impresión condicional mediante WriteIf
o WriteLineIf
para agregar una línea de impresión solo cuando sum
es 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}");
}
Ejecute la aplicación y obtendrá la siguiente salida:
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;
La lógica de la aplicación ya es correcta, así que vamos a actualizar Fibonacci(5);
a Fibonacci(6);
, lo que tendrá 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 finaliza después de producirse un error en la aserción y registrarse la información 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 de forma correcta y eficaz el código mediante las características de .NET, como Debug.WriteLine
y Debug.Assert
. Buen trabajo.