Partager via


Débogage de voyage dans le temps - Vue d’ensemble

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

Qu’est-ce que le débogage de voyage dans le temps ?

Time Travel Debugging (TTD) est un outil qui capture une trace de votre processus pendant son exécution et le rejoue ultérieurement, à la fois en avant et en arrière. TTD vous aide à diagnostiquer des bugs en vous permettant de « rembobiner » votre session de débogueur, au lieu de reproduire le problème jusqu'à ce que vous identifiiez le bug.

TTD vous permet de revenir en arrière pour mieux comprendre les conditions qui mènent au bogue et la relire plusieurs fois pour apprendre comment résoudre le problème le mieux.

TTD présente des avantages par rapport aux fichiers de vidage sur incident, qui manquent souvent de capter l’état et le chemin d’exécution ayant conduit à la défaillance finale.

Si vous ne pouvez pas déterminer vous-même le problème, vous pouvez partager la trace avec un collègue afin qu’ils puissent examiner exactement ce que vous regardez. Cette fonctionnalité facilite davantage la collaboration que le débogage en direct, car les instructions enregistrées sont identiques, tandis que les emplacements d’adresse et l’exécution du code diffèrent d'un PC à l'autre. Vous pouvez également partager un point spécifique dans le temps pour aider votre collègue à déterminer où commencer.

TTD est efficace et fonctionne pour ajouter aussi peu de surcharge que possible, car il capture l’exécution du code dans les fichiers de trace.

TTD inclut un ensemble d’objets de modèle de données du débogueur que vous pouvez utiliser pour interroger la trace avec LINQ. Par exemple, vous pouvez utiliser des objets TTD pour localiser lorsqu’un module de code spécifique a été chargé ou localiser toutes les exceptions.

Capture d’écran de WinDbg avec la commande Time Travel Débogage et trois chronologies.

Spécifications

Time Travel Debugging est intégré à WinDbg, ce qui offre une expérience d’enregistrement et de relecture fluide.

Pour utiliser TTD, vous devez exécuter le débogueur avec des autorisations élevées. Installez WinDbg à l’aide d’un compte disposant de privilèges d’administrateur et utilisez ce compte lors de l’enregistrement dans le débogueur. Pour exécuter le débogueur avec des autorisations élevées, sélectionnez et maintenez la touche enfoncée (ou cliquez avec le bouton droit) sur l’icône WinDbg dans le menu Démarrer, puis sélectionnez Plus > d’exécution en tant qu’administrateur.

Notes de publication

TTD continue d’évoluer. Pour obtenir les informations les plus récentes, consultez les notes de publication du débogage du voyage dans le temps.

Le fichier de trace créé qui contient l’enregistrement peut contenir des informations personnellement identifiables ou liées à la sécurité, y compris, mais pas nécessairement limités aux chemins d’accès, au Registre, à la mémoire ou au contenu du fichier. Les informations exactes dépendent de l’activité du processus cible pendant son enregistrement. Tenez compte de cela lors du partage de fichiers d’enregistrement avec d’autres personnes.

utilitaire d’enregistrement de ligne de commande TTD.exe

Outre l’enregistrement des traces dans l’interface utilisateur WinDbg, il existe un utilitaire de ligne de commande TTD.exe disponible pour enregistrer une trace.

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. Pour plus d’informations, consultez l’utilitaire de ligne de commande TTD.exe débogage de voyage dans le temps.

Comparaison des outils de débogage

Ce tableau récapitule les avantages et inconvénients des différentes solutions de débogage disponibles.

Approche Avantages Inconvénients
Débogage dynamique L’expérience interactive, voit le flux d’exécution, peut modifier l’état cible, outil familier dans un paramètre familier. Interrompt l’expérience utilisateur, peut nécessiter des efforts pour reproduire le problème à plusieurs reprises, peut avoir un impact sur la sécurité, pas toujours une option sur les systèmes de production. Avec la repro difficile à travailler à partir d’un point de défaillance pour déterminer la cause.
Vidages Aucun codage initial, faible intrusif, basé sur des déclencheurs. Les captures instantanées successives ou les vidages en direct fournissent une vue simple « au fil du temps ». La surcharge est essentiellement nulle si elle n’est pas utilisée.
Télémétrie & journaux Léger, souvent lié à des scénarios métier / actions utilisateur, convivial pour le Machine Learning. Des problèmes se produisent dans des chemins de code inattendus (sans télémétrie). Manque de profondeur de données, compilé statiquement dans le code.
Débogage par remontée du temps (TTD) Excellent pour les bogues complexes, aucun codage initial, débogage reproductible hors connexion, analyse conviviale, capture tout. Surcharge importante au moment de l’enregistrement. Peut collecter plus de données nécessaires. Les fichiers de données peuvent devenir volumineux.

Formation vidéo

Pour en savoir plus sur TTD, consultez ces vidéos.

Defrag Tools 185 - Ivette et JamesP dépassent les principes de base de TTD et de démonstration certaines fonctionnalités dans WinDbg

Defrag Tools 186 - Démonstration Jordi et JCAB plus de fonctionnalités de TTD dans WinDbg

CppCon (YouTube) - Jordi, Ken et JamesM ont présenté TTD dans WinDbg à CppCon 2017

Principes de base du fichier de trace

Taille du fichier de trace

Le fichier de trace peut être volumineux. Vous devez vous assurer qu’il y a suffisamment d’espace libre disponible. Si vous enregistrez un programme pendant même quelques minutes, les fichiers de trace peuvent rapidement croître jusqu’à plusieurs gigaoctets. TTD ne définit pas de taille maximale pour les fichiers de trace afin de permettre des scénarios longs complexes. La recréation rapide du problème conserve la taille du fichier de trace aussi petite que possible.

Fichiers de trace et d’index

Un fichier de trace (.run) stocke l’exécution du code pendant l’enregistrement.

Lorsque vous arrêtez l’enregistrement, le système crée un fichier d’index (.idx) pour optimiser l’accès aux informations de trace. WinDbg crée également automatiquement des fichiers d’index lorsqu’il ouvre des fichiers de trace.

Les fichiers d’index peuvent être volumineux, généralement deux fois plus volumineux que le fichier de trace.

Vous pouvez recréer le fichier d’index à partir du fichier de trace à l’aide de la !tt.index commande.

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

Les erreurs d’enregistrement et d’autres sorties d’enregistrement s’affichent dans un fichier journal WinDbg.

Vous stockez tous les fichiers de sortie dans un emplacement que vous configurez. L’emplacement par défaut se trouve dans le dossier de document de l’utilisateur. Par exemple, pour User1, les fichiers TTD sont stockés ici :

C:\Users\User1\Documents

Pour plus d'informations sur l'utilisation des fichiers de trace, consultez Débogage avec retour dans le temps - Utilisation des fichiers de trace.

Éléments à rechercher

Incompatibilités anti-virus

Vous pouvez rencontrer des incompatibilités en raison de la façon dont TTD se connecte aux processus pour les enregistrer. En règle générale, des problèmes se produisent avec des logiciels antivirus ou autres logiciels système qui tentent de suivre et de masquer les appels de mémoire du système. Si vous rencontrez des problèmes avec l’enregistrement, comme un message d’autorisation insuffisant, essayez temporairement de désactiver un logiciel antivirus.

D’autres utilitaires qui tentent de bloquer l’accès à la mémoire peuvent également être problématiques. Par exemple, Microsoft Enhanced Mitigation Experience Toolkit.

Un autre exemple d’environnement qui est en conflit avec TTD est l’infrastructure d’application Electron. Dans ce cas, la trace peut être enregistrée, mais un blocage ou un arrêt brutal du processus en cours d'enregistrement est également possible.

Mode utilisateur uniquement

TTD prend actuellement en charge uniquement l’opération en mode utilisateur. Vous ne pouvez donc pas suivre un processus en mode noyau.

Lecture en lecture seule

Vous pouvez retourner dans le temps, mais vous ne pouvez pas modifier l’historique. Vous pouvez utiliser des commandes de lecture de mémoire, mais vous ne pouvez pas utiliser de commandes qui modifient ou écrivent en mémoire.

Processus protégés par le système

Certains processus protégés par le système Windows, tels que le processus PPL (Protected Process Light), sont protégés. TTD ne peut pas s’injecter dans le processus protégé pour permettre l’enregistrement de l’exécution du code.

Impact sur les performances de l’enregistrement

L’enregistrement d’une application ou d’un processus a un impact sur les performances du PC. La surcharge de performances réelle varie en fonction de la quantité et du type de code en cours d’exécution pendant l’enregistrement. Vous pouvez vous attendre à un impact sur les performances 10x-20x dans les scénarios d’enregistrement classiques. Parfois, il n’y a pas de ralentissement notable dans l’interface utilisateur. Toutefois, pour les opérations qui consomment le plus de ressources, telles que la boîte de dialogue Ouvrir un fichier, vous voyez l’impact de l’enregistrement.

Erreurs de fichier de trace

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

Fonctionnalités avancées du débogage temporel

Chronologies

Les chronologies sont une représentation visuelle des événements qui se produisent pendant l’exécution. Ces événements peuvent être des emplacements de : points d’arrêt, lectures/écritures en mémoire, appels de fonctions et retours, et exceptions. Pour plus d’informations sur les chronologies, consultez WinDbg - Chronologies.

Prise en charge du modèle de données du débogueur

  • Prise en charge intégrée du modèle de données : TTD inclut la prise en charge du modèle de données. L’utilisation de requêtes LINQ pour analyser les échecs d’application peut être un outil puissant. Vous pouvez utiliser la fenêtre de modèle de données dans WinDbg pour travailler avec une version extensible et consultable de dx et dx -g, vous permettant de créer des tables à l'aide de NatVis, JavaScript et de requêtes LINQ.

Pour obtenir des informations générales sur le modèle de données du débogueur, consultez WinDbg - Modèle de données. Pour plus d’informations sur l’utilisation du modèle objet du débogueur TTD, consultez Time Travel Debugging - Introduction to Time Travel Debugging objects.

Prise en charge des scripts

Pour obtenir des informations générales sur l’utilisation de JavaScript et natVis, consultez WinDbg - Scripting.

utilitaire de ligne de commande TTD.exe

L’utilitaire de ligne de commande TTD.exe pour enregistrer les traces est disponible. Pour plus d’informations, consultez l’utilitaire de ligne de commande TTD.exe débogage de voyage dans le temps.

Prise en charge TTD du code managé

Vous pouvez utiliser l’extension de débogage SOS (sos.dll) s’exécutant en mode 64 bits pour déboguer du code managé à l’aide de TTD dans WinDbg. Pour plus d’informations, consultez Débogage de code managé à l’aide du débogueur Windows.

Bien démarrer avec TTD

Commencer ici

Si vous débutez avec TTD, suivez ce parcours d’apprentissage :

  1. Enregistrer une trace - Capturer votre première trace d’exécution
  2. Rejouer une trace - Naviguez et analysez votre enregistrement
  3. Guide pas à pas d'application - Exemple de débogage étape par étape

Vous avez besoin d’aide ?

Fonctionnalités avancées