Partager via


Débogage de voyage dans le temps - utilitaire de ligne de commande TTD.exe

Capture d’écran du logo de débogage du voyage dans le temps avec une horloge.

Cet article décrit quand et comment utiliser l’utilitaire de ligne de commande TTD.exe pour enregistrer les traces TTD (Time Travel Debugging). L’utilitaire de ligne de commande TTD.exe vous permet d’enregistrer l’application ou de traiter l’exécution, de l’enregistrer dans un fichier de trace et de la relire dans WinDbg pour diagnostiquer les problèmes d’exécution du code.

Cet article porte sur les points suivants :

  • Quand utiliser TTD.exe par rapport à l’interface utilisateur WinDbg
  • Comment installer et configurer TTD.exe
  • Trois façons d’enregistrer des traces (lancement, attacher, surveiller)
  • Options de ligne de commande et scénarios avancés

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. Vous pouvez lire le fichier dans le débogueur Windows pour rechercher un problème avec 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. Si vous débutez avec Time Travel Debugging, commencez par Time Travel Debugging - Vue d’ensemble pour apprendre les bases en utilisant l’interface WinDbg.

Vous pouvez avoir des scénarios où vous n’avez besoin que de l’enregistreur de ligne de commande TTD : enregistrement sur un PC sans installer le débogueur, les scénarios d’enregistrement avancés, l’automatisation des tests, et ainsi de suite. 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 remarquez 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 que vous sélectionnez.

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 TTD attaché à un processus, il ne peut pas se supprimer lui-même. Fermez l’application ou terminez le processus une fois l’enregistrement TTD terminé. Pour les processus critiques système, cette action nécessite un redémarrage du système d’exploitation.

Important

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 de 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.

Téléchargez et installez l’utilitaire de ligne de commande TTD.exe (méthode préférée)

Téléchargez l’utilitaire de ligne de commande TTD à partir de 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 à utiliser à l’invite de commandes lorsque l’installation est terminée.

Conseil

Après l’installation, ouvrez une nouvelle invite de commandes et tapez ttd.exe -help pour vérifier que l’installation a réussi.

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.

Téléchargez et installez 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 TTD.exe installé

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, exécutez la commande suivante pour rechercher 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 ressemble à 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, vous pouvez supprimer ce dossier (et vous pouvez ajouter /xd x86 à la commande robocopy pour éviter de le copier en premier lieu). La version ARM64 n’a pas de sous-répertoires.

Le fichier TTDRecordUI.dll n’est nécessaire que 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écharger et extraire manuellement le package utilitaire de ligne de commande TTD.exe

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 :

  • Obtient l’URL de la version actuelle de TTD à partir de https://aka.ms/ttd/download.
  • Télécharge le bundle MSIX.
  • Extrait le MSIX de l'architecture demandée à partir du bundle MSIX.
  • Extrait 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 enregistrez le script précédent en tant que Get-Ttd.ps1, exécutez-le 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.

Enregistrer une trace à l’aide de l’utilitaire de ligne de commande TTD.exe

Vous pouvez enregistrer une trace de trois façons :

Méthode Idéal pour Exemple de scénario
Lancer Démarrage d’un nouveau processus avec des arguments spécifiques Enregistrement d’un outil en ligne de commande comme ping.exe
Joindre Enregistrement d’un processus déjà en cours d’exécution Débogage d’un service ou d’une application de longue durée
Moniteur Enregistrement automatique à chaque démarrage d’un processus Capture des problèmes intermittents ou des problèmes de démarrage

Une fois que vous avez commencé à enregistrer le processus, déclenchez le problème que vous souhaitez déboguer. Vous pouvez ouvrir un fichier problématique ou sélectionner un bouton spécifique dans l’application pour provoquer l’événement d’intérêt. Lorsque l’application que vous enregistrez se termine, soit naturellement, soit à la suite d’un plantage, le fichier de trace est finalisé.

Conseil

L’enregistrement des traces TTD nécessite des droits d’administration. En règle générale, vous exécutez 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 temporel - Enregistrer une trace.

Lancer un processus

-launch <Program> [<arguments>]

Lancez et tracez le programme (mode par défaut).

Ce mode est le 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 vous pouvez l’utiliser pour plus de clarté.

Le premier argument non reconnu qui ne commence pas par - ou / est supposé être un chemin d’accès exécutable au lancement, et tous les arguments suivants sont 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 le Gestionnaire de tâches 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 un ID de 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 vous permet de surveiller et de suivre un programme chaque fois qu’il démarre. 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 démarre avec élévation de privilèges et cette modification peut affecter le comportement du programme.
  • Il est utile pour l’automatisation (utilisez un script qui surveille le lancement d’un programme et collecte une trace).

Vous pouvez spécifier l’option -monitor 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).

Ce mode est le 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 vous ne spécifiez pas de mode, l’outil le traite comme un lancement. Par exemple, TTD.exe -out C:\traces ping.exe msn.com 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 Gestionnaire de tâches 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 démarrent (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. Si vous spécifiez un répertoire, il doit déjà exister. Si vous spécifiez 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. Utilisez cette option pour les scénarios d’automatisation où vous n’avez pas besoin de contrôle interactif.

Si vous ne sélectionnez pas cette option, une petite interface utilisateur apparaît lorsque l’enregistrement est actif :

Capture d’écran de deux petits boutons de l’interface utilisateur TTD affichant l’état du suivi et un bouton Quitter l’application.

L’interface utilisateur fournit deux contrôles :

  • Suivi désactivé - Arrête le suivi et l’application continue à s’exécuter
  • Quitter l’application - Ferme l’application et arrête le suivi

-accepteula

Utilisez cette option pour accepter le contrat de licence utilisateur clUF. Utilisez cette option dans les scénarios d’automatisation, après avoir examiné et accepté le CLUF.

TTD affiche le Contrat de Licence Utilisateur Final (CLUF) au premier démarrage. Tapez Y ou N pour accepter le CLUF. Une fois qu'il est accepté, le CLUF n’apparaît plus au démarrage. Si vous n’acceptez pas le CLUF, TTD se ferme et affiche le CLUF lors de la prochaine exécution.

Contrôle de trace

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

Arrêtez le suivi du nom de processus spécifié, PID ou « tout ».

-wait <timeout>

Attendez jusqu’au nombre spécifié de secondes 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 le processus cible et tous les processus créés par la cible. Chaque processus enfant est enregistré dans son propre fichier de trace.

-cmdLineFilter "<string>"

Enregistrez le processus cible si sa ligne de commande contient la chaîne. Cette option fonctionne uniquement avec -monitor le mode. Il est utile lorsque 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.

Pour enregistrer ping.exe avec un horodatage dans le nom de fichier, utilisez cette commande.

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

Par défaut, l’enregistreur analyse séquentiellement le répertoire de sortie pour trouver un nom de fichier inutilisé. Si vous enregistrez ping.exe, l’enregistreur tente ping01.run, ping02.runet ainsi de suite jusqu’à ce qu’il trouve un nom de fichier inutilisé. 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 d’affectation de noms de fichiers par défaut peut devenir inefficace lorsqu’un grand nombre de fichiers existants sont présents.

-ring

Trace dans 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 est enregistrée.

-maxFile <size>

Taille maximale du fichier de trace en Mo. En mode de trace complet, la valeur par défaut est de 1 024 Go et la valeur minimale est de 1 Mo. En mode mémoire tampon en anneau, la valeur par défaut est de 2 048 Mo, la valeur minimale est de 1 Mo et la valeur maximale est de 32 768 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é. Si vous ne spécifiez pas cette valeur, un nombre illimité d’enregistrements peut se produire simultanément.

-numVCpu <number>

Spécifie le 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 vous ne spécifiez pas cette valeur, la valeur par défaut par plateforme 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 réduction de la numVCpu valeur peut avoir un impact grave sur les performances du suivi et doit uniquement être effectuée pour contourner les problèmes d’utilisation de la mémoire.

Si TTD.exe ne parvient pas à enregistrer, ou si le .out fichier 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 relectent la trace. Le paramètre par défaut est recommandé pour la portabilité des traces entre les machines, mais vous pouvez utiliser d’autres options pour produire des fichiers de trace plus petits et enregistrer plus rapidement, en fonction des instructions spécifiques utilisées par le programme cible.

<support> valeurs

Valeur Description
Default Le support CPU par défaut nécessite simplement un support de base généralement disponible dans le CPU de relecture.
MostConservative Nécessite aucune prise en charge spéciale dans le processeur de relecture. Adéquat pour les traces rejouées sur une architecture de processeur complètement différente, comme une trace Intel sur un processeur ARM64.
MostAggressive Suppose que le processeur de relecture est similaire et a une capacité égale ou supérieure à celle du processeur utilisé pour l'enregistrement.
IntelAvxRequired Suppose que le processeur de relecture est Intel/AMD 64 bits processeur prenant en charge AVX.
IntelAvx2Required On suppose que le processeur de reprise est un 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.

-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

Choisissez un scénario qui correspond à vos besoins :

Scénario - Lancer et enregistrer une application Windows

Dans ce scénario, vous lancez le Bloc-notes et créez une trace.

  1. Utilisez l’option -launch pour démarrer 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
  1. Un petit menu d’application s’affiche, montrant que le suivi est activé.

Capture d’écran de l’interface utilisateur TTD affichant l’état du suivi et un bouton Quitter l’application.

  1. Lorsque vous fermez l’application, elle génère un fichier de trace. Dans cet exemple, le fichier de trace est nommé bloc-notes01.run.

Scénario : lancer et enregistrer une application Windows avec un paramètre passé

Dans ce scénario, vous lancez la commande ping et passez l’adresse à pinger en tant que paramètre.

  1. Dans cet exemple, vous omettez l’option -launch , 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
  1. Lorsque vous fermez l’application, elle génère un fichier de trace. Dans cet exemple, le fichier de trace est nommé ping01.run.

Scénario : localiser et attacher à un processus en cours d’exécution

Dans ce scénario, vous démarrez le Bloc-notes, recherchez son ID de processus et créez une trace en attachant à l’application en cours d’exécution.

  1. Démarrez l’application cible, dans cet exemple, bloc-notes.

  2. Utilisez TaskList ou d’autres méthodes pour rechercher 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
...
  1. Utilisez l’ID de processus avec l’option -attach pour l’attacher et l’enregistrer. Si vous le souhaitez, spécifiez un nom de fichier pour le fichier de trace avec -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

Scénario : enregistrer un processus parent et ses processus enfants

Dans ce scénario, vous enregistrez un processus parent et ses processus enfants. Étant donné que certaines applications utilisent de nombreux processus enfants, le fichier de suivi familial qui contient les enfants peut devenir assez volumineux.

  1. Spécifiez l’option -children et le nom de l’application parente à enregistrer.

Cet exemple enregistre cmd.exe le lancement 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

...

  1. Plusieurs fichiers de trace sont créés : un pour le processus parent et un fichier de trace pour chaque processus enfant. WinDbg ouvre un seul 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, utilisez l’option -monitor pour enregistrer toutes les instances en cours d’exécution et les instances futures de notepad.exe jusqu’à ce que le système redémarre ou que vous quittez ttd.exe avec Ctrl+C. Vous avez besoin de l’option -out pour surveiller, et le dossier de sortie doit déjà exister.

  1. Surveillez et tracez les instances actuelles et 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

  1. Dans cet exemple, vous chargez deux instances de notepad.exe après le démarrage du suivi. Lorsque vous capturez l’activité intéressante, utilisez CTRL-C à l’invite de commandes pour arrêter l’enregistrement.

Scénario : surveillance de deux programmes pour les lancements de programmes

Dans ce scénario, utilisez l’option -monitor pour surveiller et enregistrer deux applications.

  1. Surveillez et tracez les instances actuelles et 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
  1. Dans cet exemple, vous chargez notepad.exe, puis ping.exe après le démarrage du suivi. Lorsque vous capturez l’activité intéressante, utilisez CTRL-C à l’invite de commandes pour arrêter l’enregistrement.

Conseils pour l’utilisation des fichiers de trace

  • Lorsque vous partagez des traces avec d’autres personnes, partagez uniquement le fichier .run. Le fichier d’index (.idx) peut être aussi volumineux que le fichier .run et est créé automatiquement lorsque WinDbg charge le fichier de trace.
  • Lorsque vous collaborez avec d’autres personnes, partagez les positions de trace pertinentes liées au problème. Le collaborateur peut utiliser la commande !tt x:y pour se déplacer à ce moment précis de l’exécution du code. Vous pouvez inclure des plages de position de temps dans les descriptions de bogues pour suivre l’endroit où le problème possible se produit.
  • Lorsque vous signalez un problème avec TTD, si vous fournissez le fichier .run, fournissez également le fichier .out. Cet ajout permet de confirmer que le processus d’enregistrement a fonctionné correctement.
  • Les fichiers de trace (.run) se compressent correctement.

Résolution des problèmes d’enregistrement TTD.exe

Des erreurs de fichier de trace peuvent se produire. Pour plus d’informations, consultez Débogage de voyage temporel - Résolution des problèmes.

Vous pouvez utiliser le fichier .out 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 vous aider à déterminer les spécificités de l’échec.
  • Indication de l'heure affichée par l'horloge murale à laquelle l'enregistrement a commencé et s'est 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