Depuración de viajes de tiempo: TTD.exe utilidad de línea de comandos
En este artículo se describe cuándo y cómo usar la utilidad de línea de comandos TTD.exe para registrar un seguimiento.
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. El archivo se puede reproducir en el depurador de Windows para buscar un problema con la ejecución del 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. Para obtener información sobre la depuración de viajes en el tiempo mediante la interfaz de usuario de WinDbg, consulte Time Travel Debugging - Overview(Depuración de viajes de tiempo: información general).
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.
La grabación TTD afecta al proceso grabado
La grabación TTD es una tecnología invasiva. Observará cualquier lugar desde 5x-20x o más ralentización de la aplicación o proceso en ejecución 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 está asociado a un proceso, no se puede quitar de él. Cierre la aplicación o finalice el proceso una vez completada la grabación de TTD. En el caso de los procesos críticos para el sistema, esto requerirá un reinicio del sistema operativo.
Las grabaciones TTD pueden contener información relacionada con la seguridad o la identificación personal
Las grabaciones TTD capturan el contenido de la memoria y pueden contener información relacionada con la seguridad o 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ó.
Cómo descargar e instalar la utilidad de línea de comandos TTD.exe (método preferido)
Descargue la utilidad de línea de comandos TTD aquí: https://aka.ms/ttd/download
Seleccione Instalar y TTD descargará e instalará. El comando TTD se agrega a la ruta de acceso del sistema y está disponible para su uso en el símbolo del sistema, cuando se completa la 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 el Instalador de aplicación de Microsoft 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.
Cómo descargar e instalar la utilidad de línea de comandos TTD.exe (método offline)
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 una utilidad de línea de comandos de TTD.exe ya instalada
Si ya ha instalado la utilidad de línea de comandos TTD, puede extraer los archivos de la ubicación instalada. En PowerShell, lo haría para encontrar 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 tendrá 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, esta carpeta se puede eliminar (y podría agregar /xd x86 al comando robocopy para evitar copiarla en primer lugar). La versión arm64 no tiene ningún subdirectorio.
El 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.
Descargue el paquete de la utilidad de línea de comandos TTD.exe y extraiga los archivos manualmente.
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:
- Obtenga la dirección URL de la versión actual de TTD de https://aka.ms/ttd/download.
- Descargue el paquete MSIX.
- Extraiga el paquete MSIX de msix de la arquitectura solicitada.
- Extraiga 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 guardó el script anterior como Get-Ttd.ps1
, puede ejecutarlo de esta manera para descargar los archivos binarios x64 en el directorio c:\myttd:
md c:\myttd
cd c:\myttd
.\Get-Ttd.ps1
O bien, puede especificar 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.
Cómo registrar un seguimiento mediante la utilidad de línea de comandos TTD.exe
Hay tres maneras de registrar un seguimiento.
- Iniciar un proceso
- Asociación a un proceso
- Supervisión de un proceso
Una vez que se registra el proceso, debe desencadenar el problema que desea depurar. Puede abrir un archivo problemático o hacer clic en un botón específico de la aplicación para que se produzca el evento de interés. Cuando la aplicación que se registra finaliza, naturalmente o bloqueando, el archivo de seguimiento se finalizará.
Sugerencia
La grabación de seguimientos TTD requiere derechos administrativos. Normalmente, esto se hace mediante la ejecución de ttd.exe desde un símbolo del sistema del administrador.
Para obtener más información sobre cómo grabar un seguimiento de viaje en el tiempo mediante WinDbg, consulte Time Travel Debugging - Record a trace (Depuración de viajes de tiempo: registro de un seguimiento).
Iniciar un proceso
-launch <Program> [<arguments>]
Inicie y trace el programa (modo predeterminado).
Este es el único modo que permite pasar argumentos al programa. El programa se iniciará 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 se puede usar para mayor claridad.
Se supone que el primer argumento no reconocido que no empieza por - o / será una ruta de acceso ejecutable para iniciarse, y se supone que cualquier argumento posterior será los argumentos de ese programa.
Por ejemplo, use TTD.exe notepad.exe
para iniciar y grabar el Bloc de notas. El seguimiento se detendrá cuando cierre 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 TaskManager 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 y el 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 de supervisión permite supervisar y realizar un seguimiento de un programa cada vez que se inician. 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 ejecutará con sus privilegios normales. Si inicias la aplicación directamente desde ttd.exe se iniciará con privilegios elevados y eso puede cambiar el comportamiento del programa.
- Resulta útil para la automatización (use un script que supervise el inicio de un programa y recopile un seguimiento).
La opción -monitor se puede especificar 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 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 se especifica ningún modo, también se tratará como inicio. Por ejemplo TTD.exe -out C:\traces ping.exe msn.com
, se trata como un inicio.
-attach <PID>
Adjunte a un proceso en ejecución especificado por el identificador de proceso. Use la utilidad TaskManager o 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 reiniciar). 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 es un directorio, el directorio ya debe existir. Si es 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.
Si esta opción no está seleccionada, se muestra una interfaz de usuario pequeña cuando la grabación está activa. "Seguimiento desactivado" detiene el seguimiento y la aplicación continúa; "Exit App" cierra la aplicación que también detiene el seguimiento.
-accepteula
Use esta opción para aceptar el contrato de licencia de usuario del CLUF. Esta opción se puede usar en escenarios de automatización, una vez revisado y aceptado el CLUF.
TTD muestra el CLUF la primera vez que se ejecuta. Escriba Y o N para aceptar el CLUF. Una vez aceptado, el ELA ya no se mostrará en el inicio. Si el CLUF no se acepta, se cierra TTD y se mostrará el CLUF, la próxima vez que se ejecute TTD.
Control de seguimiento
-stop <process name> | <PID> | all
Detenga el seguimiento del nombre de proceso especificado, PID o "all" se puede especificar.
-wait <timeout>
Espere hasta la cantidad de segundos especificados para que finalicen todas las sesiones de seguimiento del sistema. 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 destino, así como los procesos creados por el destino. Cada proceso secundario se registrará en su propio archivo de seguimiento.
-cmdLineFilter "<string>"
Registre el destino si su línea de comandos contiene la cadena. Esta opción solo funciona con -monitor
el modo . Resulta útil para situaciones en las que 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.
Por ejemplo, para registrar ping.exe, con una marca de tiempo incluida en el nombre de archivo, use este comando.
ttd.exe -out c:\traces -timestampFilename ping.exe msn.com
De forma predeterminada, se realiza un examen secuencial para buscar un archivo sin usar en el directorio de salida. Si ping.exe se graba la grabadora probará ping01.run, ping02.run, etc. hasta que se encuentre un nombre de archivo sin usar. Para 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
Seguimiento a un búfer de anillo. El tamaño del archivo no aumentará más allá de los límites especificados por -maxFile
. Solo se guardará la última parte de la grabación que se ajuste 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 en el modo de búfer de anillo el valor predeterminado es 2048 MB, el valor mínimo es 1 MB y el valor máximo es 32768 MB.
El valor predeterminado del 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 se especifica, se puede producir simultáneamente un número ilimitado de grabaciones.
-numVCpu <number>
Especifica una serie de CPU 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 se especifica, 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. Cambiar el valor numVCpu a un número inferior puede afectar gravemente al rendimiento del seguimiento y solo debe realizarse para solucionar problemas de uso de memoria.
Si TTD.exe no se puede grabar o el archivo .out indica una simulación de 0 segundos, el uso -numVCpu
de puede permitir que la grabación se realice correctamente.
-replayCpuSupport <support>
Especifica qué compatibilidad se espera de las CPU que se usarán para reproducir el seguimiento. Se recomienda la configuración predeterminada para la portabilidad de seguimientos entre máquinas, pero se pueden usar otras opciones para generar archivos de seguimiento 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 |
La compatibilidad predeterminada con la CPU solo requiere compatibilidad básica con disponibilidad habitual en la CPU de reproducción. |
MostConservative |
No requiere compatibilidad especial en la CPU de reproducción. Adecuado para los seguimientos que se reproducirán en una arquitectura de CPU completamente diferente, como un seguimiento de Intel en la CPU ARM64. |
MostAggressive |
Supone que la CPU de reproducción será similar y de igual o mayor capacidad que la CPU usada para grabar. |
IntelAvxRequired |
Supone que la CPU de reproducción será cpu intel/AMD de 64 bits compatible con AVX. |
IntelAvx2Required |
Se supone que la CPU de reproducción será 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.
Configuración relacionada con eventos
-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
Escenario: inicio y registro de una aplicación de Windows
En este escenario se inicia el Bloc de notas y se crea un seguimiento.
- Use la opción para iniciar el
-launch
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
- Se muestra un menú de aplicación pequeño en el que se muestra que el seguimiento está activado.
- Cuando se cierra la aplicación, se genera un archivo de seguimiento. En este bloc de notas de ejemplo01.run.
Escenario: inicio y registro de una aplicación de Windows con un parámetro pasado
En este escenario se inicia ping y la dirección al ping se pasa como parámetro.
- En este ejemplo, la
-launch
opción se omite como que 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
- Cuando se cierra la aplicación, se genera un archivo de seguimiento. En este ejemplo ping01.run.
Escenario: búsqueda y asociación a un proceso en ejecución
En este escenario se inicia el Bloc de notas, su identificador de proceso se encuentra y se crea un seguimiento mediante la asociación a la aplicación en ejecución.
Inicie la aplicación de destino, en este bloc de notas de ejemplo.
Use TaskList u otros métodos descritos en 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
...
- Con ese identificador de proceso, use la
-attach
opción para adjuntarlo y registrarlo. Opcionalmente, especifique un nombre de archivo para el archivo de seguimiento mediante-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: grabación de un elemento primario y sus procesos secundarios
En este escenario, se registrará un elemento primario y sus procesos secundarios. Dado que algunas aplicaciones pueden usar muchos procesos secundarios, el archivo de seguimiento de la familia que contiene los elementos secundarios puede llegar a ser bastante grande.
- Especifique la
-children
opción y el nombre de la aplicación primaria que se va a registrar.
Este es un ejemplo de grabación cmd.exe iniciar ping.exe como un proceso secundario.
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
...
- Se crean varios archivos de seguimiento: uno para el proceso primario y un archivo de seguimiento para cada proceso secundario. WinDbg solo abre un archivo de seguimiento a la vez, por lo que tendrá que ejecutar instancias independientes de WinDbg para cada seguimiento, si quiere 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, la -monitor
opción se usa para registrar todas las instancias actualmente en ejecución, así como futuras instancias de notepad.exe, hasta que se reinicie el sistema o se cierre ttd.exe a través de Ctrl+C. La -out
opción es necesaria para supervisar y la carpeta de salida ya debe existir.
- Supervise y realice un seguimiento del actual, así como cualquier instancia futura 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
- En este ejemplo se cargaron dos instancias de notepad.exe después de iniciar el seguimiento. Después de capturar la actividad de interés, CTRL-C se usó en el símbolo del sistema para detener la grabación.
Escenario: supervisión de dos programas para lanzamientos de programas
En este escenario, la -monitor
opción se usa para supervisar y registrar dos aplicaciones.
- Supervise y realice un seguimiento del actual, así como cualquier instancia futura 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
- En este ejemplo notepad.exe y luego ping.exe se cargaron después de iniciar el seguimiento. Después de capturar la actividad de interés, CTRL-C se usó en el símbolo del sistema para detener la grabación.
Escenario: detener la grabación en una segunda ventana
En este escenario se capturó la actividad de interés y se detiene toda la grabación mediante -stop all
. Se usa una segunda ventana de comandos para ejecutar la -stop all
opción .
C:\TTD> TTD.exe -stop all
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.
Full trace written to 'C:\TTD\Notepad01.run'
Escenario: limpieza del controlador de supervisión
En este escenario, la -cleanup
opción se usa para limpiar el controlador de supervisión una vez completada toda la grabación.
C:\TTD> TTD.exe -cleanup
The monitor service is not installed
Successfully uninstalled the Process Launch Monitor driver
Ejemplos de línea de comandos adicionales
En esta tabla se resaltan algunos ejemplos de uso de línea de comandos adicionales. Consulte las opciones de línea de comandos para obtener información adicional sobre las opciones ilustradas.
Escenario | Comando | Descripción |
---|---|---|
Adjunte al proceso, pero aún no inicie la grabación | Ttd.exe -tracingoff notepad.exe |
Inicia el Bloc de notas con la grabación desactivada. La grabación se puede iniciar en cualquier momento a través de la interfaz de usuario. |
Filtrar por línea de comandos | Ttd.exe -cmdlinefilter foo.txt -monitor notepad.exe |
Registre notepad.exe pero solo si foo.txt está en la línea de comandos cuando se inicia, colocando la salida en el directorio actual. |
Grabación de anillo | Ttd.exe -ring -attach 1234 |
Registra PID 1234 en un archivo de seguimiento limitado a 2 GB, colocando la salida en el directorio actual. El contenido anterior del archivo de seguimiento se sobrescribe según sea necesario para mantener el archivo con el tamaño máximo. Use -maxfile para cambiar el tamaño máximo. |
Limitar el tamaño del archivo de seguimiento | Ttd.exe -maxfile 4096 notepad.exe |
Registre notepad.exe hasta que el archivo de seguimiento alcance 4 GB, colocando la salida en el directorio actual. |
Limitar el número de grabaciones que se producen al mismo tiempo | Ttd.exe -maxconcurrentrecordings 1 -out c:\my\dir -monitor notepad.exe |
La grabación consume mucha CPU y, en algunos casos. |
Reducción del uso de memoria en el proceso de destino | Ttd.exe -numvcpu 8 -monitor w3wp.exe |
Algunos procesos, como w3wp.exe, establecen una cuota pequeña en la cantidad de memoria que puede usar. Si ttd.exe no puede iniciar la grabación, use -numvcpu para reducir el número de CPU virtuales que asigna TTD. Pruebe esta opción solo si ttd.exe no se puede registrar a través de otros medios. |
Elegir entre portabilidad de seguimiento y velocidad de grabación/tamaño de archivo de seguimiento | Ttd.exe -replaycpusupport mostaggressive notepad.exe |
De forma predeterminada, TTD genera archivos de seguimiento que son portátiles en una amplia gama de hardware. Elegir "mostaggressive" indica a TTD que está bien registrar un seguimiento que solo se puede reproducir en las CPU con las mismas funcionalidades que la máquina que registró el seguimiento. En algunos casos, esto puede mejorar considerablemente la velocidad de grabación y el tamaño del archivo de seguimiento. |
Ejemplos de línea de comandos de Automation
En esta tabla se resaltan algunos ejemplos de uso de línea de comandos adicionales que pueden ser útiles para el uso automatizado de TTD.exe utilidad.
Escenario | Comando | Descripción |
---|---|---|
Deshabilitar la interfaz de usuario | Ttd.exe -noui -accepteula notepad.exe |
Registre notepad.exe, colocando la salida en el directorio actual, sin mostrar la interfaz de usuario. |
Espere a que la grabadora se inicie mediante programación | Ttd.exe -accepteula -oninitcompleteevent ttd_notepad notepad.exe |
Cree un evento denominado Win32 "ttd_notepad" e inicie notepad.exe. TTD indicará "ttd_notepad" cuando se inicialice la grabación. La automatización puede esperar al evento antes de continuar con el comportamiento que quieren registrar. |
Conservar el código de salida del destino | Ttd.exe -accepteula -passthroughexit ping.exe msn.com |
Registra ping.exe, colocando la salida en el directorio actual. el código de salida de Ttd.exe será el mismo que el código de salida de ping.exe. |
Esperar a que finalice la grabación | Ttd.exe -accepteula -wait 30 |
Después de detener la grabación, espere hasta 30 segundos para que TTD termine de escribir el archivo de seguimiento en el disco. Use -wait -1 para esperar indefinidamente. |
Todos estos ejemplos usan la -accepteula
opción para asegurarse de que el cuadro de diálogo de confirmación del CLUF no bloquea la automatización.
Trabajar con el archivo de seguimiento generado
Para obtener información sobre cómo trabajar con un seguimiento e instrucciones sobre cómo reproducir seguimientos de viaje en tiempo y navegar hacia delante y hacia atrás en el tiempo, vea Time Travel Debugging - Replay a trace.
Sugerencias para trabajar con archivos de seguimiento
- Al compartir seguimientos con otros usuarios, solo tiene que compartir 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.
- Cuando colabore con otras personas, transmita cualquier posición de rastreo relevante relacionada con el problema en cuestión. 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. Se pueden incluir intervalos de posiciones en el tiempo en las descripciones de los fallos para rastrear dónde se puede estar produciendo el posible problema. - Al notificar un problema con TTD, si proporciona el archivo .run, proporcione también el archivo .out. Esto permite confirmar que el proceso de grabación funcionó correctamente.
- Los archivos de seguimiento (.run) comprimen bien.
Solución de problemas de TTD.exe
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).
El archivo .out se puede usar 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 se pueden usar para determinar los detalles del error.
- Indicación de la hora del reloj de la grabación iniciada/ detenida
- 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
Consulte también
Depuración de viajes en el tiempo - Información general
Depuración de viajes de tiempo: registro de un seguimiento
Depuración de viajes en el tiempo - Reproducción de un rastreo