Inspeccionar la aplicación con depuración en Visual Studio de historial de IntelliTraceInspect your app with IntelliTrace historical debugging in Visual Studio

Puede usar depuración histórica para desplazarse hacia atrás y hacia delante a través de la ejecución de la aplicación y comprobar su estado.You can use historical debugging to move backward and forward through the execution of your application and inspect its state.

Puede usar IntelliTrace en Visual Studio Enterprise edition, pero no las ediciones Professional o Community.You can use IntelliTrace in Visual Studio Enterprise edition but not the Professional or Community editions.

Comencemos con un sencillo programa que tiene un error.Let's start with a simple program that has a bug. En una aplicación de consola C#, agregue el código siguiente:In a C# console application, add the following code:

static void Main(string[] args)  
{  
    int testInt = 0;  
    int resultInt = AddAll(testInt);  
    Console.WriteLine(resultInt);  
}  
private static int AddAll(int j)  
{  
    for (int i = 0; i < 20; i++)  
    {  
        j = AddInt(j);  
    }  
    return j;  
}  

private static int AddInt(int add)  
{  
    if (add == 10)  
    {  
        return add += 25;  
    }  
    return ++add;  
}  

Supondremos que el valor esperado de resultInt después de llamar a AddAll() es 20 (el resultado de incrementar testInt 20 veces).We'll assume that the expected value of resultInt after calling AddAll() is 20 (the result of incrementing testInt 20 times). (También supondremos que no se puede ver el error en AddInt()). Pero el resultado es 44.(We'll also assume that you can't see the bug in AddInt()).But the result is actually 44. ¿Cómo podemos encontrar el error sin pasar por AddAll() 10 veces?How can we find the bug without stepping through AddAll() 10 times? Podemos usar depuración histórica para encontrar el error más rápida y fácilmente.We can use historical debugging to find the bug faster and more easily. Esta es la manera de hacerlo:Here's how:

  1. En Herramientas > Opciones > IntelliTrace > General, asegúrese de que IntelliTrace está habilitado y seleccione eventos de IntelliTrace e información de llamadas.In Tools > Options > IntelliTrace > General, make sure that IntelliTrace is enabled, and select IntelliTrace events and call information. Si no selecciona esta opción, no podrá ver el medianil de navegación (tal y como se explica más adelante).If you do not select this option, you will not be able to see the navigation gutter (as explained below).

  2. Establezca un punto de interrupción en la línea Console.WriteLine(resultInt);.Set a breakpoint on the Console.WriteLine(resultInt); line.

  3. Inicie la depuración.Start debugging. El código se ejecuta hasta el punto de interrupción.The code executes to the breakpoint. En el variables locales ventana, puede ver que el valor de resultInt es 44.In the Locals window, you can see that the value of resultInt is 44.

  4. Abra el herramientas de diagnóstico ventana (Depurar > Mostrar herramientas de diagnóstico).Open the Diagnostic Tools window (Debug > Show Diagnostic Tools). La ventana de código debe ser similar a la que se muestra a continuación:The code window should look like this:

    Ventana de código en el punto de interrupciónCode window at the breakpoint

  5. Debería ver una flecha doble junto al margen izquierdo, justo encima del punto de interrupción.You should see a double arrow next to the left margin, just above the breakpoint. Esta área se denomina el medianil de navegación y se usa para la depuración histórica.This area is called the navigation gutter, and is used for historical debugging. Haga clic en la flecha.Click the arrow.

    En la ventana de código, debería ver que la línea de código anterior (int resultInt = AddIterative(testInt);) es de color rosa.In the code window, you should see that the preceding line of code (int resultInt = AddIterative(testInt);) is colored pink. Por encima de la ventana, debería ver un mensaje que ya está en depuración histórica.Above the window, you should see a message that you are now in historical debugging.

    La ventana de código ahora tiene el siguiente aspecto:The code window now looks like this:

    ventana de código en modo de depuración históricacode window in historical debugging mode

  6. Ahora puede entrar en el AddAll() método (F11, o el paso a paso botón en el medianil de navegación.Now you can step into the AddAll() method (F11, or the Step Into button in the navigation gutter. Avanzar paso a paso (F10, o ir a llamada siguiente en el medianil de navegación.Step forward (F10, or Go to Next Call in the navigation gutter. La línea rosa se encuentra ahora en la línea j = AddInt(j);.The pink line is now on the j = AddInt(j); line. F10 en este caso no avanza a la siguiente línea de código.F10 in this case does not step to the next line of code. sino a la siguiente llamada de función.Instead, it steps to the next function call. Depuración histórica va de una llamada a otra y omite las líneas de código que no incluyen una llamada de función.Historical debugging navigates from call to call, and it skips lines of code that do not include a function call.

  7. Ahora, depure paso a paso por instrucciones el método AddInt().Now step into the AddInt() method. Debería ver el error en este código inmediatamente.You should see the bug in this code immediately.

Pasos siguientesNext steps

Este procedimiento Hablé superficialmente de lo que puede hacer con depuración histórica.This procedure just scratched the surface of what you can do with historical debugging.