Débogage de voyage dans le temps - utilitaire de ligne de commande TTD.exe
Cet article décrit quand et comment utiliser l’utilitaire de ligne de commande TTD.exe pour enregistrer une trace.
Quand utiliser l’utilitaire de ligne de commande TTD.exe
Time Travel Debugging (TTD) vous permet d’enregistrer l’exécution du code d’une application ou d’un processus et de l’enregistrer dans un fichier de trace. Le fichier peut être lu dans le débogueur Windows pour localiser un problème lié à l’exécution du code.
Pour de nombreux scénarios, le moyen le plus simple d’utiliser TTD pour enregistrer une application ou un processus provient directement de l’interface utilisateur WinDbg. Pour plus d’informations sur le débogage des déplacements temporels à l’aide de l’interface utilisateur WinDbg, consultez Time Travel Débogage - Vue d’ensemble.
Vous pouvez avoir des scénarios où seul l’enregistreur de ligne de commande TTD est requis : enregistrement sur un PC sans installer le débogueur, scénarios d’enregistrement avancés, automatisation des tests, etc. Dans ces scénarios, vous pouvez installer uniquement l’enregistreur de ligne de commande TTD via une URL.
L’enregistrement TTD a un impact sur le processus enregistré
L’enregistrement TTD est une technologie invasive. Vous remarquerez n’importe où entre 5x et 20x ou plus de ralentissement de l’application ou du processus en cours d’exécution lors de l’enregistrement, en fonction de l’application et des options d’enregistrement sélectionnées.
Les fichiers de trace créés augmentent au fil du temps et peuvent prendre un espace de stockage important. Travailler pour tracer pendant la plus courte période de temps, capturer l’activité du programme d’intérêt, puis fermer la trace dès que possible.
Une fois le TTD attaché à un processus, il ne peut pas être supprimé de celui-ci. Fermez l’application ou terminez le processus une fois l’enregistrement TTD terminé. Pour les processus critiques système, cela nécessite un redémarrage du système d’exploitation.
Les enregistrements TTD peuvent contenir des informations personnellement identifiables ou liées à la sécurité
Les enregistrements TTD capturent le contenu de la mémoire et peuvent contenir des informations personnellement identifiables ou liées à la sécurité, y compris, mais pas nécessairement limitées aux chemins d’accès aux fichiers, au Registre, à la mémoire ou au contenu du fichier. Les informations exactes dépendent de l’activité de processus cible pendant son enregistrement.
Comment télécharger et installer l’utilitaire de ligne de commande TTD.exe (méthode préférée)
Téléchargez l’utilitaire de ligne de commande TTD ici - https://aka.ms/ttd/download
Sélectionnez Installer et TTD télécharge et installe. La commande TTD est ajoutée au chemin d’accès système et est disponible pour une utilisation à l’invite de commandes, une fois l’installation terminée.
Si vous rencontrez des difficultés lors de l’installation, consultez Résoudre les problèmes d’installation avec le fichier Programme d’installation d’application.
Sur certains PC, vous devrez peut-être installer Microsoft App Installer pour Windows 10. Il est disponible dans l’application Microsoft Store dans Windows. Gestionnaire de package Windows est pris en charge via App Installer à partir de Windows 10 1809.
Comment télécharger et installer l’utilitaire de ligne de commande TTD.exe (méthode hors connexion)
Bien que la méthode d’installation préférée utilise le programme d’installation d’application, vous pouvez également télécharger le package de ligne de commande TTD et extraire les fichiers manuellement. Voici deux façons de le faire.
Extraire les fichiers d’un utilitaire de ligne de commande déjà installé TTD.exe
Si vous avez déjà installé l’utilitaire de ligne de commande TTD, vous pouvez extraire les fichiers à partir de l’emplacement installé. Dans PowerShell, vous devez le faire pour trouver l’emplacement installé :
(Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation
À partir de là, vous pouvez copier tous les fichiers binaires (*.dll, *.exe, *.sys) vers un nouvel emplacement. Voici une façon de procéder dans PowerShell :
robocopy.exe (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation c:\myttd *.exe *.dll *.sys /E /XD AppxMetadata
Remplacez « c :\myttd » par la destination de votre choix. Le résultat ressemblera à ceci (sur une machine 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
Notez que les fichiers binaires x86 se trouvent dans un sous-répertoire. Si vous n’avez pas besoin d’enregistrer des processus 32 bits, ce dossier peut être supprimé (et vous pouvez ajouter /xd x86 à la commande robocopy pour éviter de le copier au premier endroit). La version ARM64 n’a pas de sous-répertoires.
Le TTDRecordUI.dll est nécessaire uniquement si vous souhaitez utiliser l’interface utilisateur pour contrôler l’enregistrement. Si vous ne souhaitez pas utiliser l’interface utilisateur, vous pouvez supprimer ce fichier.
Téléchargez le package de l’utilitaire de ligne de commande TTD.exe et extrayez les fichiers manuellement
Si vous ne souhaitez pas installer l’utilitaire de ligne de commande TTD, vous pouvez télécharger le package et extraire les fichiers manuellement. Le script PowerShell suivant :
- Obtenez l’URL de la version actuelle de TTD à partir de https://aka.ms/ttd/download.
- Téléchargez le bundle MSIX.
- Extrayez le MSIX de l’architecture demandée à partir de l’offre groupée MSIX.
- Extrayez les fichiers binaires 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."
}
En supposant que vous avez enregistré le script ci-dessus en tant que Get-Ttd.ps1
, vous pouvez l’exécuter comme suit pour télécharger les fichiers binaires x64 dans le répertoire c :\myttd :
md c:\myttd
cd c:\myttd
.\Get-Ttd.ps1
Vous pouvez également spécifier le répertoire de sortie et l’architecture :
.\Get-Ttd.ps1 -OutDir c:\myttd-arm64 -Arch arm64
Remplacez « c :\myttd » ou « c :\myttd-arm64 » par la destination de votre choix.
Comment enregistrer une trace à l’aide de l’utilitaire de ligne de commande TTD.exe
Il existe trois façons d’enregistrer une trace.
- Lancer un processus
- Attacher à un processus
- Surveiller un processus
Une fois le processus enregistré, vous devez déclencher le problème que vous souhaitez déboguer. Vous pouvez ouvrir un fichier problématique ou cliquer sur un bouton spécifique dans l’application pour provoquer l’événement d’intérêt. Lorsque l’application en cours d’enregistrement se termine, naturellement ou en plantant, le fichier de trace est finalisé.
Conseil
L’enregistrement des traces TTD nécessite des droits d’administration. En règle générale, cela s’effectue en exécutant ttd.exe à partir d’une invite de commandes d’administrateur.
Pour plus d’informations sur l’enregistrement d’une trace de voyage temporelle à l’aide de WinDbg, consultez Débogage de voyage dans le temps - Enregistrer une trace.
Lancer un processus
-launch <Program> [<arguments>]
Lancez et tracez le programme (mode par défaut).
Il s’agit du seul mode qui vous permet de passer des arguments au programme. Le programme démarre avec les mêmes privilèges que TTD.exe (en tant qu’administrateur). Utilisez -attach
ou -monitor
enregistrez le programme avec son ensemble normal de privilèges.
L’inclusion -launch
est facultative, mais peut être utilisée pour plus de clarté.
Le premier argument non reconnu qui ne commence pas par - ou / sera supposé être un chemin exécutable à lancer, et tous les arguments suivants seront supposés être les arguments de ce programme.
Par exemple, utilisez TTD.exe notepad.exe
pour lancer et enregistrer le bloc-notes. La trace s’arrête lorsque vous fermez le Bloc-notes.
Pour obtenir des exemples d’utilisation, consultez les exemples d’utilisation du scénario : enregistrement d’un processus.
Attacher à un processus
-attach <PID>
Attachez-vous à un processus en cours d’exécution spécifié par l’ID de processus. Utilisez TaskManager ou l’utilitaire TaskList pour identifier les numéros de processus. Pour plus d’informations, consultez Recherche de l’ID de processus.
Par exemple, utilisez TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run
pour lancer et enregistrer le processus avec et l’ID 21440 et enregistrez la trace dans MyTraceFile.run.
Vérifiez que le répertoire existe (C:\traces
dans cet exemple) avant d’exécuter TTD.exe.
Par exemple, consultez Scénario : Localiser et attacher à un processus en cours d’exécution.
Surveiller un processus
-monitor <Program>
L’option moniteur permet à un programme d’être surveillé et suivi chaque fois qu’ils sont démarrés. Pour utiliser cette option, vous devez spécifier un chemin d’accès complet à l’emplacement de sortie avec -out
.
Pour arrêter la surveillance, appuyez sur Ctrl+C.
Les principaux avantages de la surveillance par rapport aux autres méthodes sont les suivants :
- Vous pouvez lancer l’application cible de la façon normale, sans avoir à déterminer la ligne de commande pour le démarrer.
- L’application cible s’exécute avec ses privilèges normaux. Si vous lancez l’application directement à partir de ttd.exe elle lancera avec élévation de privilèges et peut changer le comportement du programme.
- Il est utile pour l’automatisation (utilisez un script qui surveille le lancement d’un programme et collecte une trace).
L’option -monitor peut être spécifiée plusieurs fois pour surveiller plusieurs programmes.
Pour obtenir des exemples d’utilisation, consultez les exemples d’utilisation du scénario : processus de surveillance.
Options de ligne de commande
Syntaxe
TTD.exe [options] [mode] [program [<arguments>]]
-?
| -help
Affichez l’aide de la ligne de commande.
Modes
-launch <Program> [<arguments>]
Lancez et tracez le programme (mode par défaut).
Il s’agit du seul mode qui vous permet de passer des arguments au programme. L’option -launch
doit être la dernière option TTD dans la ligne de commande, suivie du programme à lancer, et tous les arguments requis par le programme. Si aucun mode n’est spécifié, il sera également traité comme étant lancé. Par exemple TTD.exe -out C:\traces ping.exe msn.com
, il est traité comme un lancement.
-attach <PID>
Attachez-vous à un processus en cours d’exécution spécifié par l’ID de processus. Utilisez l’utilitaire TaskManager ou TaskList pour identifier les ID de processus. Pour plus d’informations, consultez Recherche de l’ID de processus.
-monitor <Program>
Tracez les programmes ou services chaque fois qu’ils sont démarrés (jusqu’au redémarrage). Pour utiliser cette option, vous devez spécifier un chemin d’accès complet à l’emplacement de sortie avec -out
.
Options de ligne de commande de base
-out <path>
Spécifiez un nom de fichier de trace ou un répertoire. S’il s’agit d’un répertoire, le répertoire doit déjà exister. S’il s’agit d’un nom de fichier, le nom de fichier ne doit pas exister.
-noUI
Désactive l’interface utilisateur pour le contrôle manuel de l’enregistrement.
Si cette option n’est pas sélectionnée, une petite interface utilisateur s’affiche lorsque l’enregistrement est actif. « Suivi désactivé » arrête le suivi et l’application continue ; « Quitter l’application » ferme l’application qui arrête également le suivi.
-accepteula
Utilisez cette option pour accepter le contrat de licence utilisateur clUF. Cette option peut être utilisée dans les scénarios d’automatisation, une fois que le CLUF a été examiné et accepté.
TTD affiche le CLUF la première fois qu’il est exécuté. Tapez Y ou N pour accepter le CLUF. Une fois accepté, l’ELA ne s’affiche plus au démarrage. Si le CLUF n’est pas accepté s’arrête, et que le CLUF s’affiche, la prochaine fois que le TTD est exécuté.
Contrôle de trace
-stop <process name> | <PID> | all
Arrêter le suivi du nom de processus spécifié, piD ou « all » peut être spécifié.
-wait <timeout>
Attendez jusqu’à la quantité de secondes spécifiée pour que toutes les sessions de suivi sur le système se terminent. Spécifiez -1 pour attendre infiniment.
-tracingOff
Démarre l’application avec l’enregistrement de trace désactivé. Vous pouvez utiliser la case à cocher de l’interface utilisateur pour réactiver le suivi une fois qu’elle a été désactivée.
Options de ligne de commande supplémentaires
-children
Enregistrez la cible ainsi que tous les processus créés par la cible. Chaque processus enfant est enregistré dans son propre fichier de trace.
-cmdLineFilter "<string>"
Enregistrez la cible si sa ligne de commande contient la chaîne. Cette option fonctionne uniquement avec -monitor
le mode. Il est utile pour les situations où l’argument de ligne de commande identifie de manière unique le processus qui vous intéresse. Par exemple, -monitor notepad.exe -cmdLineFilter "specialfile.txt"
les enregistrements notepad.exe uniquement si specialfile.txt apparaît sur la ligne de commande.
-cleanup
Désinstallez le pilote du moniteur de processus.
Paramètres de comportement de trace
-timestampFilename
Ajoute un horodatage à la dernière partie du nom du fichier de trace. Par exemple, ping_2023-06-17_103116.run.
Par exemple, pour enregistrer ping.exe, avec un horodatage inclus dans le nom de fichier, utilisez cette commande.
ttd.exe -out c:\traces -timestampFilename ping.exe msn.com
Par défaut, une analyse séquentielle est effectuée pour rechercher un fichier inutilisé dans le répertoire de sortie. Si ping.exe est enregistré, l’enregistreur essaie ping01.run, ping02.run, etc. jusqu’à ce qu’un nom de fichier inutilisé soit trouvé. Pour la plupart des scénarios, cette méthode d’affectation de noms est suffisante. Toutefois, si vous souhaitez enregistrer le même programme plusieurs fois, l’algorithme de nommage de fichier par défaut peut devenir inefficace, lorsqu’il existe un grand nombre de fichiers existants.
-ring
Effectuez une trace vers une mémoire tampon en anneau. La taille du fichier ne dépasse pas les limites spécifiées par -maxFile
. Seule la dernière partie de l’enregistrement qui correspond à la taille donnée sera enregistrée.
-maxFile <size>
Taille maximale du fichier de trace en Mo. En mode de trace complet, la valeur par défaut est de 1024 Go et la valeur minimale est de 1 Mo. En mode mémoire tampon en anneau, la valeur par défaut est 2048 Mo, la valeur minimale est de 1 Mo et la valeur maximale est de 32768 Mo.
La valeur par défaut de l’anneau en mémoire sur les processus 32 bits est de 256 Mo.
-maxConcurrentRecordings <count>
Nombre maximal d’enregistrements pouvant être en cours à un moment donné. S’il n’est pas spécifié, un nombre illimité d’enregistrements peut se produire simultanément.
-numVCpu <number>
Spécifie un certain nombre de processeurs virtuels à réserver et à utiliser lors du suivi. Cette valeur affecte la surcharge totale de mémoire placée sur la mémoire du processus invité par TTD. Si ce n’est pas spécifié, la valeur par défaut est : 55 pour x64/ARM64 et 32 pour x86.
Modifiez ce paramètre pour limiter l’impact de la mémoire uniquement si vous manquez de mémoire. La modification de la valeur numVCpu en nombre inférieur peut avoir un impact grave sur les performances du suivi et doit être effectuée uniquement pour contourner les problèmes d’utilisation de la mémoire.
Si TTD.exe ne parvient pas à enregistrer, ou si le fichier .out indique une simulation de 0 secondes, l’utilisation -numVCpu
peut permettre à l’enregistrement de réussir.
-replayCpuSupport <support>
Spécifie la prise en charge attendue des processeurs qui seront utilisés pour relire la trace. Le paramètre par défaut est recommandé pour la portabilité des traces entre les machines, mais d’autres options peuvent être utilisées pour produire de petits fichiers de traces et enregistrer plus rapidement (en fonction des instructions spécifiques utilisées par le programme cible).
<support>
valeurs
Valeur | Description |
---|---|
Default |
La prise en charge du processeur par défaut nécessite simplement une prise en charge couramment disponible de base dans le processeur de relecture. |
MostConservative |
Nécessite aucune prise en charge spéciale dans le processeur de relecture. Adéquat pour les traces qui seront relectées sur une architecture de processeur complètement différente, comme une trace Intel sur le processeur ARM64. |
MostAggressive |
Suppose que l’UC de relecture sera similaire et égale ou supérieure à celle utilisée pour enregistrer le processeur. |
IntelAvxRequired |
Suppose que le processeur de relecture sera Intel/AMD 64 bits prenant en charge AVX. |
IntelAvx2Required |
Suppose que le processeur de relecture sera Intel/AMD 64 bits prenant en charge AVX2. |
Réduction de la surcharge du suivi
Bien que le TTD soit très efficace pour ce qu’il fait (suivi au niveau de l’instruction complet encodé en moins d’un octet/instruction en moyenne), il a toujours une surcharge notable lors de l’enregistrement. Les PROCESSEURs modernes peuvent exécuter des milliards d’instructions par seconde, ce qui rend même un octet/instruction coûteux. Dans de nombreux cas, l’enregistrement de l’intégralité du processus n’est pas nécessaire.
Les options suivantes peuvent être utilisées pour réduire la surcharge du suivi :
-module <module name>
Enregistrez uniquement le module spécifié (par exemple, comdlg32.dll) et le code qu’il appelle. Il peut s’agir de l’exécutable lui-même ou de n’importe quelle DLL chargée par l’exécutable. Cette option peut être spécifiée plusieurs fois pour enregistrer plusieurs modules.
Lorsque cette option est utilisée, le processus cible s’exécute à pleine vitesse jusqu’à ce que le code dans le ou les modules spécifiés soit exécuté. TTD enregistre ensuite le processus jusqu’à ce que l’exécution quitte le ou les modules spécifiés, à quel moment l’enregistrement est désactivé et la cible retourne à pleine vitesse. Étant donné que l’activation/désactivation de l’enregistrement est coûteuse, TTD laisse l’enregistrement activé lorsqu’un module spécifié appelle d’autres modules dans le processus.
-recordmode <Automatic | Manual>
L’enregistrement démarre normalement dès que TTD s’injecte lui-même dans le processus cible (« mode Automatique », la valeur par défaut). Si votre programme utilise l’API d’enregistrement in-process de TTD pour contrôler le moment où l’enregistrement se produit, vous pouvez utiliser le mode « Manuel » pour s’exécuter à pleine vitesse jusqu’à ce que votre programme appelle l’API pour démarrer l’enregistrement.
L’utilisation de ces options peut entraîner une réduction significative de la surcharge d’enregistrement et de la taille des fichiers de trace. Le débogage d’une trace enregistrée avec ces options n’est pas différent d’une trace de l’ensemble du processus. Chaque fois que vous atteignez un emplacement dans la trace où l’enregistrement est désactivé, l’instruction suivante dans la trace est la première instruction exécutée lors de la reprise de l’enregistrement.
Paramètres liés à l’événement
-passThroughExit
Transmettez la valeur de sortie du processus invité en tant que valeur de sortie de TTD.exe. Cette valeur est disponible pour les fichiers par lots via la %ERRORLEVEL%
variable. PowerShell et d’autres environnements de ligne de commande offrent également des mécanismes permettant d’obtenir la valeur de sortie du processus.
-onInitCompleteEvent <eventName>
Permet à un événement d’être signalé lorsque l’initialisation du suivi est terminée.
Exemples d’utilisation du scénario : enregistrement d’un processus
Scénario - Lancer et enregistrer une application Windows
Dans ce bloc-notes de scénario, le bloc-notes est lancé et une trace est créée.
- Utilisez l’option pour démarrer le
-launch
Bloc-notes et l’enregistrer.
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
- Un petit menu d’application s’affiche montrant que le suivi est activé.
- Lorsque l’application est fermée, un fichier de trace est généré. Dans cet exemple de bloc-notes01.run.
Scénario : lancer et enregistrer une application Windows avec un paramètre passé
Dans ce scénario, le test ping est démarré et l’adresse à ping est passée en tant que paramètre.
- Dans cet exemple, l’option
-launch
est omise, car il s’agit du mode par défaut.
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
- Lorsque l’application est fermée, un fichier de trace est généré. Dans cet exemple ping01.run.
Scénario : localiser et attacher à un processus en cours d’exécution
Dans ce bloc-notes de scénario, son ID de processus se trouve et une trace est créée en attachant à l’application en cours d’exécution
Démarrez l’application cible, dans cet exemple de bloc-notes.
Utilisez TaskList ou d’autres méthodes décrites pour localiser l’ID de processus. Pour plus d’informations, consultez Recherche de l’ID de processus.
C:\TTD> TaskList
...
Notepad.exe 21440 Console 1 73,020 K
...
- À l’aide de cet ID de processus, utilisez l’option
-attach
pour l’attacher et l’enregistrer. Spécifiez éventuellement un nom de fichier pour le fichier de trace à l’aide-out
de .
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
Scénario : enregistrement d’un parent et de ses processus enfants
Dans ce scénario, un parent et ses processus enfants seront enregistrés. Comme certaines applications peuvent utiliser de nombreux processus enfants, le fichier de suivi familial qui contient les enfants peut devenir assez volumineux.
- Spécifiez l’option
-children
et le nom de l’application parente à enregistrer.
Il s’agit d’un exemple d’enregistrement cmd.exe lancement de ping.exe en tant que processus enfant.
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
...
- Plusieurs fichiers de trace sont créés : un pour le processus parent et un fichier de trace pour chaque processus enfant. WinDbg ouvre uniquement un fichier de trace à la fois. Vous devez donc exécuter des instances distinctes de WinDbg pour chaque trace, si vous souhaitez les déboguer en même temps.
Exemples d’utilisation de scénarios : processus de surveillance
Scénario : surveillance des lancements de programme et démarrage de l’enregistrement
Dans ce scénario, l’option -monitor
est utilisée pour enregistrer toutes les instances en cours d’exécution ainsi que les futures instances de notepad.exe, jusqu’à ce que le système soit redémarré ou que ttd.exe soit quitté via Ctrl+C. L’option -out
est requise pour surveiller et le dossier de sortie doit déjà exister.
- Surveillez et tracez le courant, ainsi que toutes les instances futures 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
- Dans cet exemple, deux instances de notepad.exe ont été chargées après le démarrage du suivi. Une fois l’activité d’intérêt capturée, Ctrl-C a été utilisée à l’invite de commandes pour arrêter l’enregistrement.
Scénario : surveillance de deux programmes pour les lancements de programmes
Dans ce scénario, l’option -monitor
est utilisée pour surveiller et enregistrer deux applications.
- Surveillez et tracez le courant, ainsi que toutes les instances futures de notepad.exe et de 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
- Dans cet exemple notepad.exe, puis ping.exe ont été chargés après le démarrage du suivi. Une fois l’activité d’intérêt capturée, Ctrl-C a été utilisée à l’invite de commandes pour arrêter l’enregistrement.
Scénario : arrêt de l’enregistrement dans une deuxième fenêtre
Dans ce scénario, l’activité d’intérêt a été capturée et tout l’enregistrement est arrêté à l’aide -stop all
. Une deuxième fenêtre de commande est utilisée pour exécuter l’option -stop all
.
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'
Scénario : nettoyage du pilote du moniteur
Dans ce scénario, l’option -cleanup
est utilisée pour nettoyer le pilote du moniteur une fois l’enregistrement terminé.
C:\TTD> TTD.exe -cleanup
The monitor service is not installed
Successfully uninstalled the Process Launch Monitor driver
Exemples de ligne de commande supplémentaires
Ce tableau met en évidence des exemples d’utilisation de ligne de commande supplémentaires. Reportez-vous aux options de ligne de commande pour plus d’informations sur les options illustrées.
Scénario | Commande | Description |
---|---|---|
Attacher au processus, mais ne pas démarrer l’enregistrement | Ttd.exe -tracingoff notepad.exe |
Lance le Bloc-notes avec l’enregistrement désactivé. L’enregistrement peut être démarré à tout moment via l’interface utilisateur. |
Filtrer par ligne de commande | Ttd.exe -cmdlinefilter foo.txt -monitor notepad.exe |
Enregistrez notepad.exe mais uniquement si foo.txt se trouve sur la ligne de commande lors du lancement, en plaçant la sortie dans le répertoire actif. |
Enregistrement en anneau | Ttd.exe -ring -attach 1234 |
Enregistre PID 1234 dans un fichier de trace limité à 2 Go, en plaçant la sortie dans le répertoire actif. Un contenu plus ancien dans le fichier de trace est remplacé si nécessaire pour conserver le fichier sous la taille maximale. Permet -maxfile de modifier la taille maximale. |
Limiter la taille du fichier de trace | Ttd.exe -maxfile 4096 notepad.exe |
Enregistrez notepad.exe jusqu’à ce que le fichier de trace atteigne 4 Go, en plaçant la sortie dans le répertoire actif. |
Limiter le nombre d’enregistrements qui se produisent en même temps | Ttd.exe -maxconcurrentrecordings 1 -out c:\my\dir -monitor notepad.exe |
L’enregistrement est gourmand en uc et dans certains cas. |
Réduire l’utilisation de la mémoire dans le processus cible | Ttd.exe -numvcpu 8 -monitor w3wp.exe |
Certains processus, tels que w3wp.exe, définissent un petit quota sur la quantité de mémoire qu’il peut utiliser. Si ttd.exe ne parvient pas à démarrer l’enregistrement, utilisez -numvcpu cette option pour réduire le nombre d’allocations TTD de processeurs virtuels. Essayez cette option uniquement si ttd.exe n’est pas en mesure d’enregistrer par d’autres moyens. |
Choisir entre la portabilité de trace et la vitesse d’enregistrement/taille du fichier de trace | Ttd.exe -replaycpusupport mostaggressive notepad.exe |
Par défaut, TTD produit des fichiers de trace portables sur un large éventail de matériel. Le choix de « mostaggressive » indique à TTD qu’il est possible d’enregistrer une trace qui ne peut être lue que sur les processeurs avec les mêmes fonctionnalités que l’ordinateur qui a enregistré la trace. Dans certains cas, cela peut améliorer considérablement la vitesse d’enregistrement et la taille des fichiers de trace. |
Exemples de ligne de commande Automation
Ce tableau met en évidence des exemples d’utilisation de ligne de commande supplémentaires qui peuvent être utiles pour l’utilisation automatisée de TTD.exe utilitaire.
Scénario | Commande | Description |
---|---|---|
Désactiver l’interface utilisateur | Ttd.exe -noui -accepteula notepad.exe |
Enregistrez notepad.exe, en plaçant la sortie dans le répertoire actif, sans afficher l’interface utilisateur. |
Attendez que l’enregistreur démarre par programmation | Ttd.exe -accepteula -oninitcompleteevent ttd_notepad notepad.exe |
Créez un événement nommé Win32 « ttd_notepad » et lancez notepad.exe. TTD signale « ttd_notepad » lors de l’initialisation de l’enregistrement. Automation peut attendre l’événement avant de continuer avec le comportement qu’il souhaite enregistrer. |
Conserver le code de sortie de la cible | Ttd.exe -accepteula -passthroughexit ping.exe msn.com |
Enregistre ping.exe, en plaçant la sortie dans le répertoire actif. le code de sortie de Ttd.exe est identique au code de sortie de ping.exe. |
Attendre la fin de l’enregistrement | Ttd.exe -accepteula -wait 30 |
Une fois l’enregistrement arrêté, attendez jusqu’à 30 secondes pour que TTD termine l’écriture du fichier de trace sur le disque. Utilisez -wait -1 pour attendre indéfiniment. |
Tous ces exemples utilisent l’option -accepteula
pour s’assurer que l’automatisation n’est pas bloquée par la boîte de dialogue de confirmation du CLUF.
Utilisation du fichier de trace généré
Pour plus d’informations sur l’utilisation d’une trace et des instructions sur la relecture des traces de voyage dans le temps, puis naviguez vers l’avant et vers l’arrière dans le temps, consultez Débogage de voyage de temps - Relire une trace.
Conseils sur l’utilisation des fichiers de trace
- Lorsque vous partagez des traces avec d’autres personnes, vous devez uniquement partager le fichier .run. Le fichier d’index (.idx) peut être aussi volumineux que le fichier .run et est créé automatiquement lorsque le fichier de trace est chargé par WinDbg.
- Lors de la collaboration avec d’autres, transmettez toutes les positions de trace pertinentes liées au problème en cours. Le collaborateur peut utiliser la commande
!tt x:y
pour se déplacer à ce moment précis de l’exécution du code. Les plages de positions temporelles peuvent être incluses dans les descriptions de bogue pour suivre où le problème potentiel peut se produire. - Lorsque vous signalez un problème avec TTD, si vous fournissez le fichier .run, fournissez également le fichier .out. Cela permet de confirmer que le processus d’enregistrement a fonctionné correctement.
- Les fichiers de trace (.run) se compressent correctement.
Résolution des problèmes TTD.exe
Il existe certains cas où des erreurs de fichier de trace peuvent se produire. Pour plus d’informations, consultez Débogage de voyage temporel - Résolution des problèmes.
Le fichier .out peut être utilisé pour la résolution des problèmes. L’exemple de fichier out montre une trace fonctionnelle, se terminant par un code de sortie de zéro.
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 plupart du contenu du fichier .out est utilisé en interne par l’équipe de débogage de voyage dans le temps pour résoudre les erreurs d’enregistrement. Les informations suivantes peuvent être utiles à d’autres personnes qui travaillent avec le fichier de trace.
- Certains messages d’erreur s’affichent uniquement dans le fichier .out et peuvent être utilisés pour déterminer les spécificités de l’échec.
- Indication de l’heure de l’horloge murale que l’enregistrement a démarré / arrêté
- Durée de la session d’enregistrement (heure de simulation)
- Indique si l’enregistrement est un lancement (avec la ligne de commande) ou l’enregistrement d’attachement
- Version du système d’exploitation
Voir aussi
Débogage de voyage dans le temps - Vue d’ensemble