Inspección de los estados de aplicación anteriores mediante el retroceso de IntelliTrace en Visual Studio (Visual Studio Enterprise)

La característica step-back de IntelliTrace toma automáticamente una instantánea de la aplicación en cada punto de interrupción y evento de paso del depurador. Las instantáneas registradas le permiten volver a puntos de interrupción anteriores y ver el estado de la aplicación tal y como estaba en un momento anterior. La característica step-back de IntelliTrace puede permitirle ahorrar tiempo cuando desea ver el estado anterior de la aplicación, pero no desea reiniciar la depuración ni volver a crear el estado de aplicación que se desea.

La característica retroceder de IntelliTrace está disponible a partir de Visual Studio Enterprise 2017 versión 15.5 y posteriores, y requiere Windows 11 o Windows 10 Anniversary Update o versiones anteriores. La característica se admite actualmente para la depuración de ASP.NET, WinForms, WPF, aplicaciones de consola administrada y bibliotecas de clases administradas. A partir de Visual Studio Enterprise 2017 versión 15.7, también se admite la característica de ASP.NET Core y .NET Core. A partir de Visual Studio Enterprise 2017 versión 15.9 versión preliminar 2, también se admite la característica para aplicaciones nativas dirigidas a Windows. No se admite la depuración de aplicaciones de UWP actualmente.

En este tutorial, aprenderá lo siguiente:

  • Activación de las instantáneas y los eventos de IntelliTrace
  • Navegar por los eventos mediante los comandos Retroceder paso a paso y Avanzar paso a paso
  • Ver las instantáneas de eventos

Activar eventos de IntelliTrace y el modo instantáneas

  1. Abra el proyecto en Visual Studio Enterprise.

  2. Abra la configuración Herramientas>Opciones>IntelliTrace y seleccione la opción Eventos e instantáneas de IntelliTrace.

    A partir de Visual Studio 2017 Enterprise versión 15.9 versión preliminar 2, esta opción es Instantáneas de IntelliTrace (administradas y nativas).

    Enable IntelliTrace Events and Snapshots mode

  3. Si desea configurar las opciones para ver instantáneas en excepciones, elija IntelliTrace>Avanzadas en el cuadro de diálogo Opciones.

    Estas opciones están disponibles a partir de Visual Studio Enterprise 2017 versión 15.7.

    Configure behavior for snapshots on exceptions

    Al habilitar eventos e instantáneas, tomar instantáneas en excepciones está también habilitado de forma predeterminada. Para deshabilitar las instantáneas en excepciones, anule la selección de Recopilar instantáneas en los eventos de excepción. Cuando esta característica está habilitada, se toman instantáneas en las excepciones no controladas. En las excepciones controladas, se toman instantáneas solo si se produce la excepción y si no se vuelve a producir una excepción iniciada anteriormente. Puede establecer un número máximo de instantáneas en excepciones seleccionando un valor de la lista desplegable. El valor máximo se aplica por cada vez que la aplicación entra en modo de interrupción (por ejemplo, cuando la aplicación alcanza un punto de interrupción).

    Nota

    Las instantáneas se toman solo para eventos de excepción que IntelliTrace registre. Para código administrado, haga clic en Herramientas>Opciones>Eventos de IntelliTrace para especificar qué eventos registra IntelliTrace.

  4. En el proyecto, establezca uno o varios puntos de interrupción e inicie la depuración (presione F5), o inicie la depuración pasando por el código (F10 o F11).

    IntelliTrace toma una instantánea del proceso de la aplicación en cada paso del depurador, eventos de punto de interrupción y eventos de excepción no controlados. Estos eventos se registran en la pestaña Eventos de la ventana Herramientas de diagnóstico, junto con otros eventos de IntelliTrace. Para abrir esta ventana, elija Depurar>Windows>Mostrar herramientas de diagnóstico.

    Aparece un icono de cámara junto a los eventos para los que hay instantáneas.

    Events tab with snapshots

    Por motivos de rendimiento, no se toman instantáneas cuando efectúa un paso rapidamente. Si no aparece ningún icono de cámara junto al paso, intente ejecutar más lentamente.

  1. Para navegar por los eventos, use los botones Retroceder paso a paso (Alt + [) y Avanzar paso a paso (Alt + ]) en la barra de herramientas Depuración.

    Estos botones permiten navegar por los eventos que aparecen en la pestaña Eventos de la ventana Herramientas de diagnóstico. Retroceder o avanzar paso a paso a un evento activa de manera automática la depuración histórica del evento seleccionado.

    Step Backward and Forward buttons

    Al retroceder o avanzar paso a paso, Visual Studio entra en modo de depuración histórica. En este modo, el contexto del depurador cambia a la hora a la que se registró el evento seleccionado. Visual Studio también mueve el puntero a la línea de código correspondiente en la ventana de código fuente.

    Desde esta vista, puede inspeccionar los valores de las ventanas Pila de llamadas, Variables locales, Automático e Inspección. También puede mantener el mouse sobre las variables para ver información sobre datos y realizar la evaluación de expresiones en la ventana Inmediato. Los datos que ve provienen de la instantánea del proceso de la aplicación que se realizó en ese momento dado.

    Así, por ejemplo, si ha alcanzado un punto de interrupción y realizado un Paso (F10), el botón Retroceder paso a paso pone a Visual Studio en el modo histórico en la línea de código correspondiente al punto de interrupción.

    Activating historical mode on an event with a snapshot

  2. Para volver a la ejecución en vivo, elija Continuar (F5) o seleccione el vínculo Volver a depuración en directo en la barra de información.

  3. También puede ver una instantánea de la pestaña Eventos. Seleccione un evento con una instantánea y Activar depuración histórica.

    Activate Historical Debugging on an event

    A diferencia del comando Establecer instrucción siguiente, ver una instantánea no vuelve a ejecutar el código; en su lugar, le proporciona una vista estática del estado de la aplicación en un punto en el tiempo que se ha producido en el pasado.

    Overview of IntelliTrace step-back

    Para más información sobre cómo inspeccionar variables en Visual Studio, consulte Primer vistazo al depurador.

Preguntas más frecuentes

¿Qué diferencia hay entre el modo solo de eventos de IntelliTrace y la característica step-back?

IntelliTrace en modo de solo eventos permite activar la depuración histórica en puntos de interrupción y pasos del depurador. Sin embargo, IntelliTrace solo captura los datos en las ventanas Variables locales y Automático si están abiertas y solo captura los datos que están expandidos y en la vista. En el modo de solo eventos, a menudo no tiene una visión completa de las variables y los objetos complejos. Además, la evaluación de expresiones y la visualización de datos en la ventana Inspección no es compatible.

En los modos de eventos y de instantáneas, IntelliTrace captura la instantánea completa del proceso de la aplicación, incluidos los objetos complejos. En una línea de código, puede ver la misma información como si se hubiese detenido en un punto de interrupción (y no importa si anteriormente se expandió la información). La evaluación de expresiones también se admite cuando se está viendo una instantánea.  

¿Cuál es el impacto en el rendimiento de esta característica? 

El impacto en el rendimiento general de ejecución paso a paso depende de la aplicación. La sobrecarga de tomar una instantánea es aproximadamente de 30 ms. Cuando se toma una instantánea, se bifurca el proceso de la aplicación y se suspende la copia bifurcada. Cuando ve una instantánea, Visual Studio se conecta a la copia del proceso bifurcada. En cada instantánea, Visual Studio copia solo la tabla de páginas y establece páginas para la copia en escritura. Si cambian los objetos del montón entre los pasos del depurador con instantáneas asociadas, se copia la tabla de la página correspondiente, lo que resulta en un costo de memoria mínimo. Si Visual Studio detecta que no hay memoria suficiente para tomar una instantánea, no la toma.

Problemas conocidos

  • Si está utilizando el modo de eventos e instantáneas de IntelliTrace en las versiones de Windows anteriores a Windows 10 Fall Creators Update (RS3), y la plataforma de destino de depuración de la aplicación se establece en x86, IntelliTrace no toma instantáneas.

    Soluciones alternativas:

    • Si está en la Actualización de aniversario de Windows 10 (RS1) y su versión es anterior a la 10.0.14393.2273, instale KB4103720.
    • Si está en Windows 10 Creators Update (RS2) y su versión es anterior a la 10.0.15063.1112, instale KB4103722.
    • Instale o actualice a Windows 11 o Windows 10 Fall Creators Update (RS3).
    • Alternativamente:
      1. Instale el componente de conjunto de herramientas de VC++ 2015.3 v140 para el escritorio (x86, x64) del Instalador de Visual Studio.

      2. Compile la aplicación de destino.

      3. En la línea de comandos, use la herramienta de editbin para establecer la marca Largeaddressaware para el destino ejecutable. Por ejemplo, puede usar este comando (después de actualizar la ruta): "C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\VC\Tools\MSVC\14.12.25718\bin\Hostx86\x86\editbin.exe" /Largeaddressaware "C:\Path\To\Application\app.exe".

      4. Presione F5 para iniciar la depuración. Ahora se tomarán instantáneas en los pasos y puntos de interrupción del depurador.

        Nota

        La marca Largeaddressaware se debe establecer cada vez que se vuelve a generar el archivo ejecutable con cambios.

  • Cuando se toma una instantánea del proceso de la aplicación en una aplicación que utiliza un archivo asignado a memoria persistente, el proceso con la instantánea mantiene un bloqueo exclusivo en el archivo asignado a memoria (incluso después de que el proceso primario haya liberado el bloqueo). Otros procesos todavía pueden leer pero no escribir en el archivo asignado a la memoria.

    Solución:

    • Desactive todas las instantáneas finalizando la sesión de depuración.
  • Al depurar una aplicación cuyo proceso tiene un gran número de regiones de memoria exclusiva, como una aplicación que carga un gran número de archivos DLL, el rendimiento de la ejecución paso a paso con instantáneas habilitadas puede verse afectado. Este problema se corregirá en una futura versión de Windows. Si experimenta este problema, póngase en contacto con nosotros en stepback@microsoft.com.

  • Al guardar un archivo con Depurar > IntelliTrace > Guardar sesión de IntelliTrace en el modo de eventos e instantáneas, los datos adicionales capturados desde instantáneas no están disponibles en el archivo .itrace. En los eventos de punto de interrupción y paso, verá la misma información como si hubiera guardado el archivo en modo de solo eventos de IntelliTrace.

Pasos siguientes

En este tutorial, ha aprendido a utilizar la característica step-back de IntelliTrace. Es posible que desee obtener más información sobre otras características de IntelliTrace.