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

Time travel debugging logo featuring a clock.

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

Le débogage de voyage dans le temps est un outil qui vous permet de capturer une trace de votre processus au fur et à mesure qu’il s’exécute, puis de le relire ultérieurement à la fois vers l’avant et vers l’arrière. Le débogage de voyage dans le temps (TTD) peut vous aider à déboguer les problèmes plus facilement en vous permettant de « rembobiner » votre session de débogueur, au lieu d’avoir à reproduire le problème jusqu’à ce que vous trouviez le bogue.

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 peut avoir des avantages sur les fichiers de vidage sur incident, qui manquent souvent l’état et le chemin d’exécution qui ont conduit à l’échec ultime.

Dans le cas où vous ne pouvez pas déterminer vous-même le problème, vous pouvez partager la trace avec un collègue et ils peuvent examiner exactement ce que vous regardez. Cela peut permettre une collaboration plus facile 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 sur différents PC. Vous pouvez également partager un point spécifique dans le temps pour aider votre collègue à déterminer où commencer.

Le TTD est efficace et fonctionne pour ajouter le moins possible de surcharge, 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 pour vous permettre d’interroger la trace à l’aide de 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.

Screenshot of WinDbg with Time Travel Debugging command and three timelines.

Spécifications

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

Pour utiliser TTD, vous devez exécuter le débogueur avec élévation de privilèges. 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 élévation de privilèges, 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 que Administration istrateur.

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 instantané 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 de voyage dans le 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.

Formations 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 et l’utilisateur de TTD doit s’assurer qu’il existe 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 de fichiers de trace pour 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.

Une fois l’enregistrement arrêté, un fichier d’index (.idx) est créé pour optimiser l’accès aux informations de trace. Les fichiers d’index sont également créés automatiquement lorsque WinDbg ouvre des fichiers de trace.

Les fichiers d’index peuvent également ê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 sont écrites dans un fichier journal WinDbg.

Tous les fichiers de sortie sont stockés dans un emplacement configuré par l’utilisateur. L’emplacement par défaut se trouve dans le dossier de documents des utilisateurs. 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 de voyage 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 en 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 d’ombrer les appels de mémoire du système. Si vous rencontrez des problèmes d’enregistrement, tels qu’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 l’expérience d’atténuation améliorée microsoft Shared Computer Toolkit.

Un autre exemple d’environnement qui est en conflit avec TTD serait l’infrastructure d’application d’électrons. Dans ce cas, la trace peut enregistrer, mais un blocage ou un blocage du processus en cours d’enregistrement est également possible.

Mode utilisateur uniquement

TTD prend actuellement en charge uniquement l’opération en mode utilisateur. Le suivi d’un processus en mode noyau n’est donc pas possible.

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, de sorte que le 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 aura pas de ralentissement notable, mais pour des opérations plus gourmandes en ressources (c’est-à-dire, boîte de dialogue Ouvrir un fichier), vous pouvez voir l’impact de l’enregistrement.

Erreurs de fichier de trace

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.

Fonctionnalités avancées du débogage de voyage dans le temps

Voici quelques-unes des fonctionnalités avancées TTD les plus notables.

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 : points d’arrêt, lectures/écritures de mémoire, appels de fonction et retours, et exceptions. Pour plus d’informations sur les chronologie, 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 du modèle de données dans WinDbg pour utiliser une version extensible et extensible de « dx » et « dx -g », ce qui vous permet de créer des tables à l’aide de requêtes NatVis, JavaScript et 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

Passez en revue ces rubriques pour enregistrer et relire un fichier de trace, ainsi que pour plus d’informations sur l’utilisation des fichiers de trace et la résolution des problèmes.

Ces rubriques décrivent des fonctionnalités avancées supplémentaires dans le débogage des voyages dans le temps.