Compartir a través de


Depuración de viajes de tiempo: información general

Time travel debugging logo featuring a clock.

¿Qué es la depuración de viajes de tiempo?

Time Travel Debugging es una herramienta que permite capturar un seguimiento del proceso a medida que se ejecuta y, a continuación, reproducirlo más adelante y hacia atrás. La depuración de viajes de tiempo (TTD) puede ayudarle a depurar problemas más fáciles al permitirle "rebobinar" la sesión del depurador, en lugar de tener que reproducir el problema hasta que encuentre el error.

TTD le permite volver atrás en el tiempo para comprender mejor las condiciones que conducen al error y reproducirlo varias veces para aprender a corregir el problema.

TTD puede tener ventajas sobre los archivos de volcado de memoria, que a menudo pierden el estado y la ruta de acceso de ejecución que provocó el error final.

En caso de que no pueda averiguar el problema usted mismo, puede compartir el seguimiento con un compañero de trabajo y pueden ver exactamente lo que está viendo. Esto puede permitir una colaboración más sencilla que la depuración en vivo, ya que las instrucciones grabadas son las mismas, mientras que las ubicaciones de direcciones y la ejecución de código variarán en equipos diferentes. También puede compartir un momento específico para ayudar a su compañero de trabajo a averiguar dónde empezar.

TTD es eficaz y funciona para agregar la menor sobrecarga posible, ya que captura la ejecución de código en archivos de seguimiento.

TTD incluye un conjunto de objetos de modelo de datos del depurador para permitirle consultar el seguimiento mediante LINQ. Por ejemplo, puede usar objetos TTD para buscar cuándo se cargó un módulo de código específico o localizar todas las excepciones.

Screenshot of WinDbg with Time Travel Debugging command and three timelines.

Requisitos

Time Travel Debugging se integra con WinDbg, lo que proporciona una experiencia de grabación y reproducción perfectas.

Para usar TTD, debe ejecutar el depurador con privilegios elevados. Instale WinDbg mediante una cuenta que tenga privilegios de administrador y use esa cuenta al grabar en el depurador. Para ejecutar el depurador con privilegios elevados, seleccione y mantenga presionado (o haga clic con el botón derecho) el icono de WinDbg en la menú Inicio y, a continuación, seleccione Más > ejecución como Administración istrator.

El archivo de seguimiento creado que contiene la grabación puede contener información relacionada con la seguridad o la identificación personal, incluidos, entre otros, las rutas de acceso de archivo, el registro, la memoria o el contenido del archivo. La información exacta depende de la actividad del proceso de destino mientras se registró. Tenga en cuenta esto al compartir archivos de grabación con otras personas.

utilidad de grabación de línea de comandos TTD.exe

Además de grabar seguimientos en la interfaz de usuario de WinDbg, hay una utilidad de línea de comandos TTD.exe disponible para grabar un seguimiento.

Es posible que tenga escenarios en los que solo se requiera la grabadora de línea de comandos TTD: grabación en un equipo sin instalar el depurador, escenarios avanzados de grabación, automatización de pruebas, etc. En estos escenarios, puede instalar solo la grabadora de línea de comandos TTD a través de una dirección URL. Para obtener más información, vea Time Travel Debugging - TTD.exe utilidad de línea de comandos.

Comparación de las herramientas de depuración

En esta tabla se resumen las ventajas y desventajas de las diferentes soluciones de depuración disponibles.

Enfoque Ventajas Desventajas
Depuración en directo La experiencia interactiva, ve el flujo de ejecución, puede cambiar el estado de destino, herramienta familiar en la configuración conocida. Interrumpe la experiencia del usuario, puede requerir esfuerzo para reproducir el problema repetidamente, puede afectar a la seguridad, no siempre una opción en los sistemas de producción. Con la reproducción difícil de volver a trabajar desde el punto de error para determinar la causa.
Volcados No hay codificación inicial ni intrusiva, basada en desencadenadores. Las instantáneas sucesivas o volcados dinámicos proporcionan una vista simple "a lo largo del tiempo". La sobrecarga es básicamente cero si no se usa.
Telemetría y registros Ligero, a menudo vinculado a escenarios empresariales o acciones de usuario, fácil de aprender automático. Surgen problemas en rutas de acceso de código inesperadas (sin telemetría). Falta de profundidad de datos, compilada estáticamente en el código.
Depuración de viajes de tiempo (TTD) Excelente en errores complejos, sin codificar por adelantado, depuración repetible sin conexión, análisis descriptivo, captura todo. Sobrecarga grande en tiempo de registro. Puede recopilar más datos necesarios. Los archivos de datos pueden ser grandes.

Aprendizaje mediante vídeos

Para obtener más información sobre TTD, consulte estos vídeos.

Herramientas de desfragmentación 185 : Ivette y JamesP pasan por los conceptos básicos de TTD y demostración de algunas características en WinDbg

Herramientas de desfragmentación 186 - Jordi y JCAB demo más excelentes características de TTD en WinDbg

CppCon (YouTube): Jordi, Ken y JamesM presentaron TTD en WinDbg en CppCon 2017

Conceptos básicos del archivo de seguimiento

Tamaño del archivo de seguimiento

El archivo de seguimiento puede ser grande y el usuario de TTD debe asegurarse de que hay suficiente espacio disponible. Si graba un programa durante unos minutos, los archivos de seguimiento pueden crecer rápidamente para ser varios gigabytes. TTD no establece un tamaño máximo de archivos de seguimiento para permitir escenarios complejos de larga duración. Al volver a crear rápidamente el problema, se mantendrá el tamaño del archivo de seguimiento lo más pequeño posible.

Archivos de seguimiento e índice

Un archivo de seguimiento (.run) almacena la ejecución del código durante la grabación.

Una vez detenida la grabación, se crea un archivo de índice (.idx) para optimizar el acceso a la información de seguimiento. Los archivos de índice también se crean automáticamente cuando WinDbg abre archivos de seguimiento.

Los archivos de índice también pueden ser grandes, normalmente dos veces más grandes que el archivo de seguimiento.

Puede volver a crear el archivo de índice desde el archivo de seguimiento mediante el !tt.index comando .

0:000> !tt.index
Successfully created the index in 10ms.

Los errores de grabación y otra salida de grabación se escriben en un archivo de registro de WinDbg.

Todos los archivos de salida se almacenan en una ubicación configurada por el usuario. La ubicación predeterminada está en la carpeta de documentos de usuarios. Por ejemplo, para User1, los archivos TTD se almacenarían aquí:

C:\Users\User1\Documents

Para obtener más información sobre cómo trabajar los archivos de seguimiento, vea Time Travel Debugging - Working with trace files (Depuración de viajes de tiempo: trabajar con archivos de seguimiento).

Cosas que hay que buscar

Incompatibilidades antivirus

Es posible que encuentre incompatibilidades debido a la forma en que los enlaces TTD se procesan para grabarlos. Normalmente surgen problemas con el antivirus u otro software del sistema que está intentando realizar un seguimiento de las llamadas de memoria del sistema de sombras y . Si tiene problemas con la grabación, como un mensaje de permiso insuficiente, intente deshabilitar temporalmente cualquier software antivirus.

Otras utilidades que intentan bloquear el acceso a la memoria también pueden ser problemáticas, por ejemplo, el Kit de herramientas de experiencia de mitigación mejorada de Microsoft.

Otro ejemplo de un entorno que entra en conflicto con TTD, sería el marco de aplicación de electrones. En este caso, el seguimiento puede registrar, pero también es posible un interbloqueo o bloqueo del proceso que se está grabando.

Solo modo de usuario

Actualmente, TTD solo admite la operación en modo de usuario, por lo que no es posible realizar el seguimiento de un proceso de modo kernel.

Reproducción de solo lectura

Puede viajar de nuevo en el tiempo, pero no puede cambiar el historial. Puede usar comandos de lectura de memoria, pero no puede usar comandos que modifiquen o escriban en la memoria.

Procesos protegidos por el sistema

Algunos procesos protegidos por el sistema Windows, como el proceso de Luz de proceso protegido (PPL) están protegidos, por lo que el TTD no se puede insertar en el proceso protegido para permitir la grabación de la ejecución del código.

Impacto en el rendimiento de la grabación

La grabación de una aplicación o proceso afecta al rendimiento del equipo. La sobrecarga de rendimiento real varía en función de la cantidad y el tipo de código que se ejecuta durante la grabación. Puede esperar aproximadamente un éxito de rendimiento de 10x-20x en escenarios de grabación típicos. A veces no habrá una ralentización notable, pero para las operaciones más intensivas de recursos (es decir, el cuadro de diálogo Abrir archivo) puede ver el impacto de la grabación.

Errores de archivo de seguimiento

Hay algunos casos en los que pueden producirse errores de archivo de seguimiento. Para obtener más información, vea Time Travel Debugging - Troubleshooting (Depuración de viajes de tiempo: solución de problemas).

Características avanzadas de la depuración de viajes en tiempo

Estas son algunas de las características más importantes de TTD avanzadas.

Escalas de tiempo

Las escalas de tiempo son una representación visual de los eventos que se producen durante la ejecución. Estos eventos pueden ser ubicaciones de: puntos de interrupción, lectura y escritura de memoria, llamadas de función y devoluciones y excepciones. Para obtener más información sobre las escalas de tiempo, consulta WinDbg - Timelines.

Compatibilidad con el modelo de datos del depurador

  • Compatibilidad del modelo de datos integrado: TTD incluye compatibilidad con el modelo de datos. El uso de consultas LINQ para analizar errores de aplicación puede ser una herramienta eficaz. Puede usar la ventana del modelo de datos en WinDbg para trabajar con una versión expandible y explorable de "dx" y "dx -g", lo que le permite crear tablas con consultas NatVis, JavaScript y LINQ.

Para obtener información general sobre el modelo de datos del depurador, consulte WinDbg - Modelo de datos. Para obtener información sobre cómo trabajar con el modelo de objetos del depurador TTD, vea Time Travel Debugging - Introduction to Time Travel Debugging objects .

Compatibilidad con scripting

  • Automatización de scripting: la compatibilidad de scripting con JavaScript y NatVis permite la automatización de la investigación de problemas. Para obtener más información, consulte Time Travel Debugging - JavaScript Automation.

Para obtener información general sobre cómo trabajar con JavaScript y NatVis, vea WinDbg - Scripting.

utilidad de línea de comandos de TTD.exe

La utilidad de línea de comandos TTD.exe para registrar seguimientos está disponible. Para obtener más información, vea Time Travel Debugging - TTD.exe utilidad de línea de comandos.

Compatibilidad con TTD de código administrado

Puede usar la extensión de depuración de SOS (sos.dll) que se ejecuta en modo de 64 bits para depurar código administrado mediante TTD en WinDbg. Para obtener más información, consulte Depuración de código administrado mediante el depurador de Windows.

Introducción a TTD

Revise estos temas para grabar y reproducir un archivo de seguimiento, así como para obtener información sobre cómo trabajar con archivos de seguimiento y solucionar problemas.

En estos temas se describe la funcionalidad avanzada adicional en la depuración de viajes en el tiempo.