Compartir a través de


Depuración de viajes de tiempo: TTD.exe utilidad de línea de comandos

Captura de pantalla del logotipo de depuración de recorrido temporal con un reloj.

En este artículo se describe cuándo y cómo usar la utilidad de línea de comandos TTD.exe para registrar seguimientos de depuración de recorrido de tiempo (TTD). La utilidad de línea de comandos TTD.exe permite registrar la aplicación o la ejecución del proceso, guardarla en un archivo de seguimiento y reproducirla en WinDbg para diagnosticar problemas de ejecución de código.

En este artículo, aprenderá lo siguiente:

  • Cuándo usar TTD.exe frente a la interfaz de usuario de WinDbg
  • Instalación y configuración de TTD.exe
  • Tres maneras de registrar rastros (lanzar, adjuntar, monitorear)
  • Opciones de línea de comandos y escenarios avanzados

Cuándo usar la utilidad de línea de comandos TTD.exe

Time Travel Debugging (TTD) permite registrar la ejecución de código de una aplicación o proceso y guardarla en un archivo de seguimiento. Puede reproducir el archivo en el depurador de Windows para buscar un problema con la ejecución de código.

En muchos escenarios, la manera más fácil de usar TTD para registrar una aplicación o proceso es directamente desde la interfaz de usuario de WinDbg. Si no está familiarizado con la depuración de viajes en el tiempo, empiece con Descripción general de la depuración de viajes en el tiempo para aprender los conceptos básicos mediante la interfaz WinDbg.

Es posible que tenga escenarios en los que solo necesite 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.

La grabación TTD afecta al proceso grabado

La grabación TTD es una tecnología invasiva. Observa una ralentización del funcionamiento de la aplicación o del proceso de entre 5 y 20 veces, o incluso más, durante la grabación, dependiendo de la aplicación y las opciones de grabación seleccionadas.

Los archivos de seguimiento creados crecen con el tiempo y pueden tardar mucho espacio de almacenamiento. Trabaje para realizar el seguimiento durante el período de tiempo más corto, capturar la actividad del programa de interés y, a continuación, cerrar el seguimiento lo antes posible.

Una vez que TTD se asocia a un proceso, no se puede quitar a sí mismo. Cierre la aplicación o finalice el proceso una vez completada la grabación de TTD. Para los procesos críticos del sistema, esta acción requiere un reinicio del sistema operativo.

Importante

Las grabaciones TTD capturan el contenido de la memoria y pueden 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ó.

Descargue e instale la utilidad de línea de comandos TTD.exe (método preferido)

Descargue la utilidad de línea de comandos TTD de https://aka.ms/ttd/download.

Seleccione Instalar para que TTD se descargue e instale automáticamente. El comando TTD se agrega a la ruta del sistema y está disponible en la línea de comandos cuando se completa la instalación.

Sugerencia

Una vez instalada, abra un nuevo terminal de comandos y escriba ttd.exe -help para verificar la correcta instalación.

Si tiene dificultades para instalar, consulte Solución de problemas de instalación con el archivo instalador de aplicación.

En algunos equipos, es posible que deba instalar Microsoft App Installer para Windows 10. Está disponible en la aplicación microsoft Store en Windows. Administrador de paquetes de Windows se admite a través del Instalador de aplicaciones a partir de Windows 10 1809.

Descargue e instale la utilidad de línea de comandos TTD.exe (método sin conexión)

Aunque el método de instalación preferido es usar el Instalador de aplicación, también puede descargar el paquete de línea de comandos TTD y extraer los archivos manualmente. Estas son dos maneras de hacerlo.

Extraer los archivos de la utilidad de línea de comandos TTD.exe instalada

Si ya instaló la utilidad de línea de comandos TTD, puede extraer los archivos de la ubicación instalada. En PowerShell, ejecute el siguiente comando para buscar la ubicación instalada:

(Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation

Desde allí, puede copiar todos los archivos binarios (*.dll, *.exe, *.sys) en una nueva ubicación. Esta es una manera de hacerlo en PowerShell:

robocopy.exe (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation c:\myttd *.exe *.dll *.sys /E /XD AppxMetadata

Reemplace "c:\myttd" por el destino que prefiera. El resultado tiene un aspecto similar al siguiente (en una máquina x64):

ls -Recurse c:\myttd

    Directory: C:\myttd

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----           11/9/2023  2:43 PM                x86
-a---           11/9/2023  2:43 PM          79240 ProcLaunchMon.sys
-a---           11/9/2023  2:43 PM         112568 TTD.exe
-a---           11/9/2023  2:43 PM         309176 TTDInject.exe
-a---           11/9/2023  2:43 PM          55328 TTDLoader.dll
-a---           11/9/2023  2:43 PM         821176 TTDRecord.dll
-a---           11/9/2023  2:43 PM        1222584 TTDRecordCPU.dll
-a---           11/9/2023  2:43 PM          63416 TTDRecordUI.dll

    Directory: C:\myttd\x86

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           11/9/2023  2:43 PM         247728 TTDInject.exe
-a---           11/9/2023  2:43 PM          42928 TTDLoader.dll
-a---           11/9/2023  2:43 PM        1128480 TTDRecordCPU.dll

Tenga en cuenta que los archivos binarios x86 están en un subdirectorio. Si no necesita registrar procesos de 32 bits, puede eliminar esta carpeta (y puede agregar /xd x86 al comando robocopy para evitar copiarla en primer lugar). La versión arm64 no tiene ningún subdirectorio.

El archivo TTDRecordUI.dll solo es necesario si desea usar la interfaz de usuario para controlar la grabación. Si no desea la interfaz de usuario, puede eliminar este archivo.

Descargar y extraer manualmente el paquete de la utilidad de línea de comandos de TTD.exe

Si no desea instalar la utilidad de línea de comandos TTD, puede descargar el paquete y extraer los archivos manualmente. El siguiente script de PowerShell:

  • Obtiene la dirección URL de la versión actual de TTD de https://aka.ms/ttd/download.
  • Descargar el paquete MSIX.
  • Extrae el MSIX de la arquitectura solicitada del lote MSIX.
  • Extrae los archivos binarios TTD de MSIX.
param(
    $OutDir = ".",
    [ValidateSet("x64", "x86", "arm64")]
    $Arch = "x64"
)

# Ensure the output directory exists
if (!(Test-Path $OutDir)) {
    $null = mkdir $OutDir
}

# Ensure the temp directory exists
$TempDir = Join-Path $OutDir "TempTtd"
if (!(Test-Path $TempDir)) {
    $null = mkdir $TempDir
}

# Determine if the destination already contains binaries
$extensions = @('.dll', '.exe', '.sys')
$existingBinaries = (Get-ChildItem -recurse $OutDir | Where-Object Extension -In $extensions).Count -gt 0

# Download the appinstaller to find the current uri for the msixbundle
Invoke-WebRequest https://aka.ms/ttd/download -OutFile $TempDir\ttd.appinstaller

# Download the msixbundle
$msixBundleUri = ([xml](Get-Content $TempDir\ttd.appinstaller)).AppInstaller.MainBundle.Uri

if ($PSVersionTable.PSVersion.Major -lt 6) {
    # This is a workaround to get better performance on older versions of PowerShell
    $ProgressPreference = 'SilentlyContinue'
}

# Download the msixbundle (but name as zip for older versions of Expand-Archive)
Invoke-WebRequest $msixBundleUri -OutFile $TempDir\ttd.zip

# Extract the 3 msix files (plus other files)
Expand-Archive -DestinationPath $TempDir\UnzippedBundle $TempDir\ttd.zip -Force

# Expand the build you want - also renaming the msix to zip for Windows PowerShell
$fileName = switch ($Arch) {
    "x64"   { "TTD-x64"   }
    "x86"   { "TTD-x86"   }
    "arm64" { "TTD-ARM64" }
}

# Rename msix (for older versions of Expand-Archive) and extract the debugger
Rename-Item "$TempDir\UnzippedBundle\$fileName.msix" "$fileName.zip"
Expand-Archive -DestinationPath "$OutDir" "$TempDir\UnzippedBundle\$fileName.zip"

# Delete the temp directory
Remove-Item $TempDir -Recurse -Force

# Remove unnecessary files, if it is safe to do so
if (-not $existingBinaries) {
    Get-ChildItem -Recurse -File $OutDir |
        Where-Object Extension -NotIn $extensions |
        Remove-Item -Force

    Remove-Item -Recurse -Force (Join-Path $OutDir "AppxMetadata")
} else {
    Write-Host "Detected pre-existing binaries in '$OutDir' so did not remove any files from TTD package."
}

Suponiendo que guarde el script anterior como Get-Ttd.ps1, ejecútelo de este modo para descargar los archivos binarios x64 en el directorio c:\myttd:

md c:\myttd
cd c:\myttd
.\Get-Ttd.ps1

O bien, especifique el directorio de salida y la arquitectura:

.\Get-Ttd.ps1 -OutDir c:\myttd-arm64 -Arch arm64

Reemplace "c:\myttd" o "c:\myttd-arm64" por el destino que prefiera.

Registra un trazo mediante la utilidad de línea de comandos TTD.exe

Puede registrar un rastreo de tres maneras:

Método Más adecuado para Escenario de ejemplo
Lanzar Inicio de un nuevo proceso con argumentos específicos Grabación de una herramienta de línea de comandos como ping.exe
Adjuntar Grabación de un proceso ya en ejecución Depuración de un servicio o una aplicación en ejecución prolongada
Monitor Grabación automática cada vez que se inicia un proceso Captura de problemas intermitentes o problemas de inicio

Después de iniciar la grabación del proceso, desencadene el problema que desea depurar. Puede abrir un archivo problemático o seleccionar un botón específico en la aplicación para provocar el evento de interés. Cuando la aplicación que está grabando finaliza, ya sea de forma natural o por fallo, el archivo de seguimiento se finaliza.

Sugerencia

La grabación de seguimientos TTD requiere derechos administrativos. Normalmente, se ejecuta ttd.exe desde un símbolo del sistema de administrador.

Para obtener más información sobre cómo grabar un seguimiento de viaje en el tiempo mediante WinDbg, consulte Depuración de Viajes en el Tiempo: Registro de un Seguimiento.

Iniciar un proceso

-launch <Program> [<arguments>]

Inicie y trace el programa (modo predeterminado).

Este modo es el único modo que permite pasar argumentos al programa. El programa se inicia con los mismos privilegios que TTD.exe (como administrador). Use -attach o -monitor para registrar el programa con su conjunto normal de privilegios.

La inclusión -launch es opcional, pero puede usarla para mayor claridad.

Se supone que el primer argumento no reconocido que no empieza por - o / es una ruta de acceso ejecutable que se va a iniciar, y se supone que los argumentos posteriores son los argumentos de ese programa.

Por ejemplo, use TTD.exe notepad.exe para iniciar y grabar el Bloc de notas. El seguimiento se detiene al cerrar el Bloc de notas.

Para obtener un ejemplo de uso, consulte Ejemplos de uso de escenarios: grabación de un proceso.

Asociación a un proceso

-attach <PID>

Adjunte a un proceso en ejecución especificado por el identificador de proceso. Use el Administrador de tareas o la utilidad TaskList para identificar los números de proceso. Para obtener más información, consulte Búsqueda del identificador de proceso.

Por ejemplo, use TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run para iniciar y registrar el proceso con un identificador de 21440 y guardar el seguimiento en MyTraceFile.run.

Asegúrese de que el directorio existe (C:\traces en este ejemplo) antes de ejecutar TTD.exe.

Para obtener un ejemplo de uso, consulte Escenario: buscar y adjuntar a un proceso en ejecución.

Supervisión de un proceso

-monitor <Program>

La opción monitor le permite supervisar y realizar un seguimiento de un programa cada vez que se inicia. Para usar esta opción, debe especificar una ruta de acceso completa a la ubicación de salida con -out.

Para detener la supervisión, presione Ctrl+C.

Las principales ventajas de la supervisión en comparación con los otros métodos son:

  • Puede iniciar la aplicación de destino de la manera normal, no es necesario averiguar la línea de comandos para iniciarla.
  • La aplicación de destino se ejecuta con sus privilegios normales. Si inicia la aplicación directamente desde ttd.exe, se inicia con privilegios elevados y ese cambio podría afectar al comportamiento del programa.
  • Resulta útil para la automatización (use un script que supervise el inicio de un programa y recopile un seguimiento).

Puede especificar la opción -monitor más de una vez para supervisar varios programas.

Para ver el uso de ejemplo, consulte Ejemplos de uso de escenarios: procesos de supervisión.

Opciones de línea de comandos

Sintaxis

TTD.exe [options] [mode] [program [<arguments>]]

-? | -help

Muestra la ayuda de la línea de comandos.

Modos

-launch <Program> [<arguments>]

Inicie y trace el programa (modo predeterminado).

Este modo es el único modo que permite pasar argumentos al programa. La -launch opción debe ser la última opción TTD en la línea de comandos, seguida del programa que se va a iniciar y los argumentos que requiera el programa. Si no especifica un modo, la herramienta la trata como un inicio. Por ejemplo, TTD.exe -out C:\traces ping.exe msn.com se considera como un lanzamiento.

-attach <PID>

Adjunte a un proceso en ejecución especificado por el identificador de proceso. Use el Administrador de tareas o la utilidad TaskList para identificar identificadores de proceso. Para obtener más información, consulte Búsqueda del identificador de proceso.

-monitor <Program>

Seguimiento de programas o servicios cada vez que se inician (hasta el reinicio). Para usar esta opción, debe especificar una ruta de acceso completa a la ubicación de salida con -out.

Opciones básicas de la línea de comandos

-out <path>

Especifique un nombre de archivo de seguimiento o un directorio. Si especifica un directorio, ya debe existir. Si especifica un nombre de archivo, el nombre de archivo no debe existir.

-noUI

Deshabilita la interfaz de usuario para el control manual de la grabación. Use esta opción para escenarios de automatización en los que no se necesita control interactivo.

Si no selecciona esta opción, aparece una interfaz de usuario pequeña cuando la grabación está activa:

Captura de pantalla de la interfaz de usuario TTD pequeña de dos botones que muestra el estado de seguimiento y un botón Salir de la aplicación.

La interfaz de usuario proporciona dos controles:

  • Seguimiento desactivado : detiene el seguimiento y la aplicación continúa ejecutándose
  • Salir de la aplicación : cierra la aplicación y detiene el seguimiento

-accepteula

Use esta opción para aceptar el contrato de licencia de usuario del CLUF. Use esta opción en escenarios de automatización, después de revisar y aceptar el CLUF.

TTD muestra el CLUF la primera vez que se ejecuta. Escriba Y o N para aceptar el CLUF. Una vez aceptado, el CLUF ya no aparece al inicio. Si no acepta el CLUF, TTD se cerrará y, la próxima vez que se ejecute, mostrará el CLUF.

Control de seguimiento

-stop <process name> | <PID> | all

Detenga el seguimiento del nombre de proceso especificado, PID o "all".

-wait <timeout>

Espere hasta el número de segundos especificado para que todas las sesiones de seguimiento del sistema finalicen. Especifique -1 para esperar infinitamente.

-tracingOff

Inicia la aplicación con la grabación de seguimiento desactivada. Puede usar la casilla de interfaz de usuario para volver a activar el seguimiento después de que se haya desactivado.

Opciones de línea de comandos adicionales

-children

Registre el proceso objetivo y cualquier proceso creado por dicho objetivo. Cada proceso secundario se registra en su propio archivo de trazas.

-cmdLineFilter "<string>"

Registre el proceso de destino si su línea de comandos contiene la cadena. Esta opción solo funciona con -monitor el modo . Resulta útil cuando el argumento de la línea de comandos identifica de forma única el proceso que le interesa. Por ejemplo, -monitor notepad.exe -cmdLineFilter "specialfile.txt" registra notepad.exe solo si specialfile.txt aparece en la línea de comandos.

-cleanup

Desinstale el controlador del monitor de procesos.

Configuración del comportamiento de seguimiento

-timestampFilename

Agrega una marca de tiempo a la última parte del nombre del archivo de seguimiento. Por ejemplo: ping_2023-06-17_103116.run.

Para registrar ping.exe con una marca de tiempo en el nombre de archivo, use este comando.

ttd.exe  -out c:\traces -timestampFilename ping.exe msn.com

De forma predeterminada, la grabadora examina secuencialmente el directorio de salida para buscar un nombre de archivo sin usar. Si graba ping.exe, la grabadora intenta ping01.run, ping02.run, etc. hasta que encuentre un nombre de archivo sin usar. En la mayoría de los escenarios, este método de nomenclatura es suficiente. Sin embargo, si desea registrar el mismo programa muchas veces, el algoritmo de nomenclatura de archivos predeterminado puede ser ineficaz cuando hay un gran número de archivos existentes.

-ring

Traza en un búfer circular. El tamaño del archivo no aumenta más allá de los límites especificados por -maxFile. Solo se guarda la última parte de la grabación que se ajusta al tamaño especificado.

-maxFile <size>

Tamaño máximo del archivo de seguimiento en MB. Cuando está en modo de seguimiento completo, el valor predeterminado es 1024 GB y el valor mínimo es 1 MB. Cuando está en modo de búfer en anillo, el valor predeterminado es 2048 MB, el valor mínimo es 1 MB y el valor máximo es de 32 768 MB.

El valor predeterminado para el anillo en memoria en procesos de 32 bits es de 256 MB.

-maxConcurrentRecordings <count>

Número máximo de grabaciones que pueden estar en curso en cualquier momento dado. Si no especifica este valor, se puede producir simultáneamente un número ilimitado de grabaciones.

-numVCpu <number>

Especifica el número de procesadores virtuales que se van a reservar y usar al realizar el seguimiento. Este valor afecta a la sobrecarga total de memoria colocada en la memoria del proceso invitado por TTD. Si no especifica este valor, el valor predeterminado por plataforma es 55 para x64/ARM64 y 32 para x86.

Cambie esta configuración para limitar el impacto en la memoria solo si se está quedando sin memoria. Reducir el numVCpu valor puede afectar gravemente al rendimiento del seguimiento y solo debe realizarse para solucionar problemas de uso de memoria.

Si TTD.exe falla al grabar, o el .out archivo indica una simulación de 0 segundos, usar -numVCpu podría permitir que la grabación sea exitosa.

-replayCpuSupport <support>

Especifica el soporte esperado de los CPU que reproducen la traza. Se recomienda la configuración predeterminada para la portabilidad de seguimientos entre máquinas, pero puede usar otras opciones para generar archivos de seguimiento más pequeños y registrar más rápido, en función de las instrucciones específicas usadas por el programa de destino.

Valores <support>

Valor Descripción
Default Compatibilidad predeterminada con la CPU, solo requiere soporte básico, comúnmente disponible, en la CPU utilizada para la reproducción.
MostConservative No requiere compatibilidad especial en la CPU de reproducción. Adecuado para los seguimientos que se reproducen en una arquitectura de CPU completamente diferente, como un seguimiento de Intel en la CPU ARM64.
MostAggressive Supone que la CPU de reproducción es similar y de igual o mayor capacidad que la CPU usada para grabar.
IntelAvxRequired Supone que la CPU de reproducción es LA CPU intel/AMD de 64 bits compatible con AVX.
IntelAvx2Required Supone que la CPU de reproducción es la CPU intel/AMD de 64 bits compatible con AVX2.

Reducción de la sobrecarga de seguimiento

Aunque TTD es muy eficaz para lo que hace (seguimiento de nivel de instrucción completo codificado en menos de un byte o instrucción en promedio), todavía tiene una sobrecarga notable al grabar. Las CPU modernas pueden ejecutar miles de millones de instrucciones por segundo, lo que hace que incluso un byte o instrucción sea costoso. En muchos casos no es necesario registrar todo el proceso.

Se pueden usar las siguientes opciones para reducir la sobrecarga del seguimiento:

-module <module name>

Registre solo el módulo especificado (como comdlg32.dll) y el código al que llama. Puede ser el propio archivo ejecutable o cualquier archivo DLL cargado por el ejecutable. Esta opción se puede especificar más de una vez para registrar varios módulos.

Cuando se usa esta opción, el proceso de destino se ejecuta a toda velocidad hasta que se ejecuta el código de los módulos especificados. TTD registrará el proceso hasta que la ejecución deje los módulos especificados, en cuyo punto se desactiva la grabación y el destino vuelve a la velocidad completa. Dado que activar o desactivar la grabación es costoso, TTD dejará la grabación cuando un módulo especificado llame a otros módulos del proceso.

-recordmode <Automatic | Manual>

Normalmente, la grabación se inicia en cuanto TTD se inserta en el proceso de destino ("Automático", el valor predeterminado). Si el programa usa la API de grabación en proceso de TTD para controlar cuándo se produce la grabación, puede usar el modo "Manual" para ejecutarse a toda velocidad hasta que el programa llame a la API para iniciar la grabación.

El uso de estas opciones puede dar lugar a una reducción significativa de la sobrecarga de grabación y el tamaño del archivo de seguimiento. La depuración de un seguimiento registrado con estas opciones no es diferente de un seguimiento de todo el proceso. Siempre que llegue a una ubicación en el seguimiento donde se desactiva la grabación, la siguiente instrucción del seguimiento es la primera instrucción ejecutada al reanudar la grabación.

-passThroughExit

Pase el valor de salida del proceso de invitado como valor de salida de TTD.exe. Este valor está disponible para procesar por lotes los archivos a través de la %ERRORLEVEL% variable . PowerShell y otros entornos de línea de comandos ofrecen mecanismos para obtener también el valor de salida del proceso.

-onInitCompleteEvent <eventName>

Permite indicar un evento cuando se completa la inicialización del seguimiento.

Ejemplos de uso de escenarios: grabación de un proceso

Elija un escenario que coincida con sus necesidades:

Escenario: inicio y registro de una aplicación de Windows

En este escenario, inicias el Bloc de notas y creas una traza.

  1. Use la -launch opción para iniciar el Bloc de notas y grabarlo.
C:\TTD> TTD.exe -launch notepad.exe
Launching 'notepad.exe'
    Recording process (PID:9960) on trace file: C:\TTD\notepad01.run
notepad.exe(x64) (PID:9960): Process exited with exit code 0 after 12984ms
  Full trace dumped to C:\TTD\notepad01.run
  1. Aparece un menú de aplicación pequeño, en el que se muestra que el seguimiento está activado.

Captura de pantalla de la interfaz de usuario de TTD que muestra el estado del seguimiento y un botón Salir de la aplicación.

  1. Al cerrar la aplicación, genera un archivo de seguimiento. En este ejemplo, el archivo de seguimiento se denomina notepad01.run.

Escenario: inicio y registro de una aplicación de Windows con un parámetro pasado

En este escenario, se inicia ping y se pasa la dirección para hacer ping como parámetro.

  1. En este ejemplo, se omite la -launch opción porque es el modo predeterminado.
C:\TTD> TTD.exe ping.exe msn.com
Launching 'ping.exe msn.com'
    Recording process (PID:24044) on trace file: C:\TTD\ping01.run

Pinging msn.com [204.79.197.219] with 32 bytes of data:
Reply from 204.79.197.219: bytes=32 time=22ms TTL=118
Reply from 204.79.197.219: bytes=32 time=21ms TTL=118
Reply from 204.79.197.219: bytes=32 time=25ms TTL=118
Reply from 204.79.197.219: bytes=32 time=21ms TTL=118

Ping statistics for 204.79.197.219:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 21ms, Maximum = 25ms, Average = 22ms
ping.exe(x64) (PID:24044): Process exited with exit code 0 after 3390ms
  Full trace dumped to C:\TTD\ping01.run
  1. Al cerrar la aplicación, genera un archivo de seguimiento. En este ejemplo, el archivo de seguimiento se denomina ping01.run.

Escenario: búsqueda y asociación a un proceso en ejecución

En este escenario, iniciará el Bloc de Notas, buscará su identificador de proceso y creará un seguimiento mediante la conexión a la aplicación en ejecución.

  1. Inicie la aplicación de destino, en este ejemplo, bloc de notas.

  2. Utilice TaskList u otros métodos para buscar el identificador de proceso. Para obtener más información, consulte Búsqueda del identificador de proceso.

C:\TTD> TaskList
...
Notepad.exe                  21440 Console                    1     73,020 K
...
  1. Use el identificador de proceso con la -attach opción para adjuntarlo y registrarlo. Opcionalmente, especifique un nombre de archivo para el archivo de seguimiento con -out.
C:\TTD> TTD.exe -attach 21440 -out C:\TTD\MyTraceFile.run
Attaching to 21440
    Recording process (PID:21440) on trace file: C:\TTD\MyTraceFile.run
(x64) (PID:21440): Process exited with exit code 0 after 26672ms
  Full trace dumped to C:\TTD\MyTraceFile.run

Escenario: Registro de un proceso padre y sus procesos hijo

En este escenario, registrará un proceso primario y sus procesos secundarios. Dado que algunas aplicaciones usan muchos procesos hijo, el archivo de rastreo familiar que contiene los procesos hijo puede llegar a ser bastante grande.

  1. Especifique la -children opción y el nombre de la aplicación primaria que se va a registrar.

En este ejemplo se registra el lanzamiento de cmd.exe como un proceso secundario de ping.exe.

ttd.exe -out d:\traces -children cmd.exe /C ping.exe msn.com

Microsoft (R) TTD 1.01.11
Release: 1.11.0.0
Copyright (C) Microsoft Corporation. All rights reserved.

Launching 'cmd.exe /C ping.exe msn.com'
    Recording process (PID:48200) on trace file: d:\traces\cmd01.run
    Recording process (PID:53724) on trace file: d:\traces\PING01.run

Pinging msn.com [204.79.197.219] with 32 bytes of data:
Reply from 204.79.197.219: bytes=32 time=6ms TTL=117
Reply from 204.79.197.219: bytes=32 time=6ms TTL=117
Reply from 204.79.197.219: bytes=32 time=7ms TTL=117
Reply from 204.79.197.219: bytes=32 time=7ms TTL=117

Ping statistics for 204.79.197.219:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 6ms, Maximum = 7ms, Average = 6ms
(x64) (PID:53724): Process exited with exit code 0 after 3516ms
  Trace family nesting level is 1; Parent process ID is 48200
  Full trace dumped to d:\traces\PING01.run

...

  1. Se crean varios archivos de seguimiento: uno para el proceso primario y un archivo de seguimiento para cada proceso secundario. WinDbg abre solo un archivo de seguimiento a la vez, por lo que debe ejecutar instancias independientes de WinDbg para cada seguimiento si desea depurarlos al mismo tiempo.

Ejemplos de uso de escenarios: procesos de supervisión

Escenario: supervisión de los inicios del programa e inicio de la grabación

En este escenario, use la -monitor opción para registrar todas las instancias actualmente en ejecución y futuras de notepad.exe hasta que el sistema se reinicie o salga de ttd.exe con Ctrl+C. Necesita la opción -out para monitor, y la carpeta de salida debe existir previamente.

  1. Supervise y siga las instancias actuales y futuras de notepad.exe.
C:\TTD> TTD.exe -out C:\TTD\ -monitor notepad.exe
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.


The Process Launch Monitor driver is not installed
Successfully installed the Process Launch Monitor driver
Recording process Notepad.exe(15904)        From parent process explorer.exe(8440)
    Recording process (PID:15904) on trace file: C:\TTD\notepad01.run
Recording process Notepad.exe(19920)        From parent process explorer.exe(8440)
    Recording process (PID:19920) on trace file: C:\TTD\notepad02.run
(x64) (PID:19920): Process exited with exit code 0 after 1281ms
  Full trace dumped to C:\TTD\notepad02.run

(x64) (PID:15904): Process exited with exit code 0 after 30719ms
  Full trace dumped to C:\TTD\notepad01.run

  1. En este ejemplo, se cargan dos instancias de notepad.exe después de que se inicie el seguimiento. Cuando captures la actividad de interés, usa CTRL-C en el símbolo del sistema para detener la grabación.

Escenario: supervisión de dos programas para lanzamientos de programas

En este escenario, use la -monitor opción para supervisar y grabar dos aplicaciones.

  1. Supervise y trace las instancias actuales y futuras de notepad.exe y ping.exe.
C:\TTD> TTD.exe -out C:\TTD\ -monitor notepad.exe -monitor ping.exe
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.


Successfully uninstalled the Process Launch Monitor driver
Successfully installed the Process Launch Monitor driver
Recording process Notepad.exe(17972)        From parent process explorer.exe(8440)
    Recording process (PID:17972) on trace file: C:\TTD\Notepad01.run
Tracking process svchost.exe(7824)        From parent process services.exe(1292)
Tracking process sppsvc.exe(10376)        From parent process services.exe(1292)
Tracking process ClipUp.exe(15108)        From parent process svchost.exe(7824)
Tracking process ClipUp.exe(21180)        From parent process ClipUp.exe(15108)
Tracking process consent.exe(24280)        From parent process svchost.exe(892)
Tracking process ctfmon.exe(24508)        From parent process svchost.exe(5064)
Tracking process wt.exe(10768)        From parent process explorer.exe(8440)
Tracking process WindowsTerminal.exe(23296)        From parent process wt.exe(10768)
Tracking process OpenConsole.exe(6816)        From parent process WindowsTerminal.exe(23296)
Tracking process powershell.exe(15956)        From parent process WindowsTerminal.exe(23296)
Tracking process git.exe(3656)        From parent process powershell.exe(15956)
Tracking process git.exe(1928)        From parent process git.exe(3656)
Tracking process git.exe(20312)        From parent process powershell.exe(15956)
Tracking process git.exe(5712)        From parent process git.exe(20312)
Tracking process csc.exe(16144)        From parent process powershell.exe(15956)
Tracking process cvtres.exe(19488)        From parent process csc.exe(16144)
Recording process PING.EXE(21468)        From parent process powershell.exe(15956)
    Recording process (PID:21468) on trace file: C:\TTD\PING01.run
(x64) (PID:21468): Process exited with exit code 1 after 234ms
  Full trace dumped to C:\TTD\PING01.run


Tracking process Teams.exe(10060)        From parent process Teams.exe(2404)
Tracking process cmd.exe(21796)        From parent process powershell.exe(15956)
Recording process PING.EXE(364)        From parent process cmd.exe(21796)
    Recording process (PID:364) on trace file: C:\TTD\PING02.run
(x64) (PID:364): Process exited with exit code 1 after 234ms
  Full trace dumped to C:\TTD\PING02.run
  1. En este ejemplo, primero carga notepad.exe y luego ping.exe después de que comience el trazado. Al capturar la actividad de interés, use CTRL-C en el símbolo del sistema para detener la grabación.

Sugerencias para trabajar con archivos de seguimiento

  • Al compartir seguimientos con otros usuarios, comparta solo el archivo .run. El archivo de índice (.idx) puede ser tan grande como el archivo .run y se crea automáticamente cuando WinDbg carga el archivo de seguimiento.
  • Al colaborar con otros usuarios, comparta las posiciones de seguimiento pertinentes relacionadas con el problema. El colaborador puede utilizar el comando !tt x:y para desplazarse a ese punto exacto en el tiempo de la ejecución del código. Puede incluir intervalos de posición de tiempo en descripciones de errores para realizar un seguimiento cuando se produzca el posible problema.
  • Al notificar un problema con TTD, si proporciona el archivo .run, proporcione también el archivo .out. Esta adición permite confirmar que el proceso de grabación funcionó correctamente.
  • Los archivos de seguimiento (.run) comprimen bien.

Solución de problemas de grabación de TTD.exe

Se pueden producir errores en el archivo de trazas. Para obtener más información, vea Time Travel Debugging - Troubleshooting (Depuración de viajes de tiempo: solución de problemas).

Puede usar el archivo .out para solucionar problemas. El archivo de ejemplo muestra un seguimiento funcional, que termina con un código de salida de cero.

Microsoft (R) TTDRecord 1.01.11
Release: 1.11.47.0
Copyright (C) Microsoft Corporation. All rights reserved.


Initializing Time Travel Debugging for Attach to 9916
Time: 05/08/2023 17:07:15
OS:10.0.25314 EDITION:x64

SessionID: 008F918C-B8A7-4C4E-B91B-34CFC953C501

   (TTD::ManageTTDTrace:2725)
Running 
   (TTD::StartGuestProcess:1512)
Group tracing GUID: B84DF180-DA54-46E5-9019-73690C689979

Running "C:\WINDOWS\SYSTEM32\TTDInject.exe" /duration 1 /InjectMode LoaderForCombinedRecording /ClientParams "37 C:\TTD\Notepad03.run 0 0 0 0 0 0 0 0 c06001 0" /RecordScenario 268435458 /attach 9916 -TraceFileHandle 4f8 -GuestEventHandle 380 -ClientEventHandle 384 -ActiveEventHandle 4f4 -MutexHandle 46c -CommunicationBufferHandle 3c0 -SharedSequenceMutexHandle 3b8 -SharedSequenceBufferHandle 330 /TelemetryFeatureSessionId "008F918C-B8A7-4C4E-B91B-34CFC953C501"
   (TTD::StartGuestProcess:1955)
Microsoft (R) TTDInject 1.01.11
Release: 1.11.27.0
Copyright (C) Microsoft Corporation. All rights reserved.

TTDLoader Params:
 LauncherDll = TTDLoader
 ClientDll   = TTDRecordCPU
 ClientEntry = InitializeNirvanaClient
 ClientParams= 37 C:\TTD\Notepad03.run 0 0 0 0 0 0 0 0 c06001 0
 Attach
WaitForMain is off
Allocated processors:55, running threads:2.
Loader TTDLoader.dll injected at 0x00007FFF423B0000 0xc000 -- .reload  TTDLoader.dll=0x00007FFF423B0000,0xc000

Injection by thread is complete.
RecordingEngine initialization successful.
RecordVcpu initialization successful.
Loader initialization successful.
Guest Process is x64 binary.
Tracing started at: Tue May  9 00:07:16 2023 (UTC) Mon May  8 17:07:16 2023 (Local)

Guest process exited with exit code 0
Simulation time of '' (x64): 18781ms.
Tracing completed at: Tue May  9 00:07:34 2023 (UTC) Mon May  8 17:07:34 2023 (Local)

La mayoría del contenido del archivo .out se usa internamente en el equipo de depuración de viajes de tiempo para solucionar errores de grabación. La siguiente información puede ser útil para otros usuarios que trabajan con el archivo de seguimiento.

  • Algunos mensajes de error solo se muestran en el archivo .out y pueden ayudarle a determinar los detalles del error.
  • Indicación de la hora en que la grabación comenzó y terminó.
  • Duración de la sesión de grabación (tiempo de simulación)
  • Indica si la grabación es un inicio (con línea de comandos) o adjuntar grabación
  • La versión del sistema operativo