Partager via


Notes de publication de Time Travel Debugging (TTD)

Logo de débogage avec voyage dans le temps mettant en vedette une horloge.

Cette rubrique fournit des informations sur les nouveautés de Time Travel Debugging (TTD).

1.11.553

!tt avec aucun argument, il affiche désormais une aide brève et la position actuelle (au lieu de passer au début de la trace).

Une nouvelle méthode de modèle de données vous permet de voir l’historique des valeurs d’une variable locale. Dans un objet Frame, tel que @$curframe pour le frame actuel, vous pouvez utiliser . TTD. VariableHistory() pour obtenir un journal des valeurs écrites dans une variable et la plage de positions de la variable contenait cette valeur.

  • dx -g @$curframe.TTD.VariableHistory().Variables affiche la liste des noms de variables locales.
  • dx -g @$curframe.TTD.VariableHistory().Variables[n].Values affiche l'historique de la variable locale #n.

L’API TTD Replay est également disponible dans un Kit de développement logiciel (SDK) expérimental. Cette API est la même API que celle utilisée par le débogueur pour interagir avec TTD et ce qui permet . Appels() / . Mémoire() pour collecter efficacement des données. Pour plus d’informations, consultez https://aka.ms/ttdsdk.

Résolution

  • Correction du blocage provoqué par la dépréciation de ErrorReporting::PrintError (1.11.553)

1.11.532

Cette version est une version de maintenance qui apporte des améliorations à la robustesse de l’enregistrement. Cette version TTD coïncide avec la version de juin 2025 de Windbg. Une nouvelle fonctionnalité est que l'objet du modèle de données Position intègre maintenant le pourcentage dans le suivi.

Modifié

  • Maintenance d’infrastructure diverses.
  • Utilisez l’implémentation standard ISO de C++ volatile. (1.11.518)
  • Ajouter un pourcentage à la projection du modèle de données Position. (1.11.514)

Résolution

  • Augmentez la robustesse de la gestion de TTD des instructions décodées. (1.11.530)
  • Supprimer les utilisations de XSAVE dans l’émulateur et optimiser le transfert de registre interne. (1.11.509)

1.11.506

Cette version était une version mineure prévue pour coïncider avec la sortie d'avril 2025 de WinDbg.

Modifié

  • Si vous cliquez sur une position TTD dans le modèle de données (par exemple, dans la liste Modules), accédez à cette position dans la trace. (1.11.492)

    Remarque : la fenêtre de commande n’affiche pas la position TTD mise à jour tant que l’étape suivante ou la commande d’exécution n’est pas exécutée.

Résolution

  • Ajoutez le nom du processus au fichier .out lors de l’attachement à un PID pour faciliter la résolution des problèmes. (1.11.486)

1.11.481

Nous avons repensé la commande !tt pour vous donner des moyens plus puissants de parcourir votre trace :

  • Les pourcentages fractionnels peuvent être utilisés pour affiner l’espace de recherche ( !tt 23,65)
  • Trouvez le moment précédent/suivant où le registre change de valeur (!tt br ebx)
  • Trouvez la fois précédente ou suivante qu'une plage de mémoire est accessible (!tt ba- [addr] [plage])
  • Trouvez le moment précédent ou suivant où l’exécution passe à un autre module (!tt bm)
  • Rechercher l'heure précédente/suivante où l'exécution se déplace vers un module spécifique (!tt bm ntdll)

Pour plus d’informations, consultez !tt (voyage temporel).

Quelques correctifs notables :

  • « Les messages "Erreur : la valeur 64 bits perd de la précision lors de la conversion en nombre" lors de l'utilisation de @$cursession.TTD.Data.Heap() sur une trace 32 bits ont disparu. »
  • Le parsing de l'option d'aide (-?, -help) est désormais correctement détecté n'importe où dans la ligne de commande.
  • dx @$cursession.TTD.Calls() n’exige plus que les adresses correspondent au début d’une fonction. Au lieu de cela, l’adresse est mappée au début de la fonction correspondante la plus proche.
  • TTD signale correctement la version du système d’exploitation cible à partir de la commande vertarget.
  • L’utilisation de « -monitor » avec un nom de service hébergé n’enregistre plus les services hébergés non liés.

Ajouté(e)

  • Inscrire des points d’arrêt de modification dans les traces TTD (1.11.431)

Modifié

  • Corrigez l’enregistrement des services selon le nom à l’aide du mode moniteur (1.11.477)
  • Capturer les informations réelles du système d’exploitation cible à utiliser par le débogueur (1.11.473)
  • Correction du transfert des registres XMM entre l’émulateur et CONTEXT (1.11.469)
  • Autoriser les requêtes d’appel sur des adresses à l’intérieur d’une fonction (1.11.459)
  • Prendre en charge les symboles en tant qu’adresses/tailles dans la ligne de commande !tt (1.11.454)
  • Améliorer la cohérence et étendre les fonctionnalités des commandes de navigation TTD (1.11.453)
  • Améliorer la cohérence des bases de données de module face aux données endommagées (1.11.430)

Résolution

  • Ajouter un nom de processus à la sortie lors de l’attachement à PID (1.11.486)
  • TTD. Data.Heap() signale « Erreur : la valeur 64 bits perd la précision de la conversion en nombre » dans certains cas (1.11.471)
  • Améliorer la fiabilité de l’enregistrement d’un processus avec des piles d’ombres activées (1.11.466)
  • Ajouter la navigation de module via !tt bm et le modèle de données (1.11.462)
  • Corrigez certains problèmes liés à l’analyse de ligne de commande. (1.11.444)
  • Correction de lodsd, chargement double mot à l'adresse (mettre à zéro la partie supérieure de rax) (1.11.434)
  • Corriger certains bogues libfuzzer (1.11.433)

1.11.429

Cette mise à jour de TTD contient quelques corrections de bogues ainsi que des changements internes pour améliorer la fiabilité.

Note : La version 1.11.410 a introduit une régression dans l'émulation de l'instruction Intel/AMD LODSD. Un correctif pour cette régression viendra dans la prochaine version.

Correctifs :

  • Amélioration de la robustesse de la lecture des paquets et autres changements divers pour améliorer la fiabilité.
  • Correction d'une régression dans l'émulation de l'instruction AVX VBROADCAST[I/F]128.
  • Corrigez l'accès à l'enregistrement des exceptions sur ARM64 dans les versions plus récentes de Windows.

1.11.410

Amélioration de l'accessibilité : L'interface de progression s'adapte désormais correctement aux changements de taille du texte.

La commande @$cursession.TTD.Calls() du débogueur prend désormais en charge les caractères génériques qui correspondent à un grand nombre de fonctions. Il est désormais possible d’interroger un grand nombre de fonctions (@$cursession.TTD.Calls("kernel32!*")).

Automatisation : Une nouvelle option de ligne de commande -onMonitorReadyEvent indique quand le moniteur d'enregistrement (commutateur -monitor) est prêt à enregistrer de nouveaux processus.

Correctifs :

  • Correction de certaines conditions de course lors de l'initialisation de l'enregistreur.
  • Correction de la façon dont nous enregistrons les appels syscall afin que les points d'arrêt fonctionnent correctement.
  • Correction de plusieurs problèmes liés à l'enregistrement sélectif des modules.

Corrections pour ARM64 :

  • Correction d'un bogue empêchant l'enregistrement TTD sur les processeurs simples de niveau ARM64v8.0.
  • Amélioration de la messagerie lors de la tentative d'utilisation sur ARM64 d'une trace d'un processus x86 ou x64.

Corrections AMD/Intel (y compris certains problèmes signalés par Google) :

  • Correction de l’émulation incorrecte de LODS : au lieu de supprimer les bits inutilisés de RAX, ils sont maintenant correctement conservés.
  • Correction de l’émulation de l’instruction « pop ax » dans les processus x86/x64, qui mettait incorrectement à zéro les bits supérieurs du registre complet (par exemple, « pop ax » mettait à zéro les bits supérieurs de rax).
  • Émulation directe de l'instruction XGETBV (plus rapide).
  • Emulation directe de tous les mouvements SIMD de l'AVX512 (plus rapide).

1.11.316

Correction d'une régression qui provoquait des plantages occasionnels lors de l'enregistrement de programmes comportant de longues séquences ininterrompues d'instructions lourdes en données.

Corrections pour ARM64 :

  • L'enregistrement dans les processus ARM64 dont la fonctionnalité PAC est activée est désormais pris en charge.
  • Correction des instructions ANDS et TST, qui ne parvenaient pas à effacer les indicateurs de retenue et de dépassement de capacité.

Corrections AMD/Intel :

  • Correction d'un bogue où TTD émulait incorrectement « xchg r8,rax » et « xchg r8w,ax » comme NOP.

1.11.304

TTD implémente désormais et met à la disposition du public une API pour contrôler l’enregistreur depuis le processus enregistré en direct. La documentation ainsi qu’un exemple sont disponibles sur GitHub.

TTD peut désormais s’injecter avec l’enregistrement désactivé en utilisant le nouveau commutateur -recordMode. Par défaut, TTD utilise -recordMode Automatic, ce qui entraîne l’enregistrement de tous les threads. Si -recordMode Manual est spécifié, TTD s'injecte dans le processus cible, mais ne capture rien jusqu’à ce qu’une API le lui ordonne via un appel d’API.

L’enregistrement peut désormais être restreint à un ensemble spécifique de modules en utilisant le commutateur -module. Dans certains scénarios, cette restriction peut entraîner un enregistrement beaucoup plus rapide et des fichiers de trace plus petits. Plusieurs commutateurs -module peuvent être spécifiés.

Les composants d’enregistrement et de ré-exécution correspondants sont désormais inclus dans la distribution. En cas d’incompatibilité entre le débogueur et l’enregistreur en ligne de commande, ou un bug de ré-exécution, les composants de ré-exécution peuvent être copiés dans l’installation du débogueur en tant que solution de contournement jusqu’à ce qu’un nouveau débogueur soit publié.

L’emplacement du fichier installé se trouve dans PowerShell en exécutant la commande suivante :

ls (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation

Ajouté(e)

  • Ajoutez le commutateur -recordmode pour activer l’injection sans enregistrement automatique (1.11.296)
  • Ajoutez le commutateur -module et utilisez-le pour créer une configuration SR (1.11.291)
  • Données personnalisées du projet enregistrées par l’API en cours de traitement en modèle de données (1.11.286)
  • Ajoutez un nouveau TTDLiveRecorder.dll et connectez-le avec TTDRecordCPU.dll (1.11.283)
  • Ajoutez des composants de ré-exécution à MSIX & corriger la recherche de SDK (1.11.265)

Modifié

aucun

Résolution

  • Contourner un bug dans le sérialiseur JSON nlohmann, utilisé dans certains outils internes (1.11.281)
  • Ajustez l’alignement des chaînes pour éviter un bug rare de CRT (1.11.279)
    • Signalé et corrigé dans les bases de code de VS et OS.
  • Plusieurs petites corrections à partir de rapports d’erreurs Watson (1.11.276)
  • Correction d’une régression qui peut causer la corruption du fichier de trace dans certains cas (1.11.264)

Problèmes connus

  • Sur ARM64, le compilateur ne parvient pas à appeler plusieurs fonctions à haute fréquence, ce qui, dans des cas extrêmes, peut entraîner l’insuffisance de l’espace de pile et le blocage de l’enregistreur.

1.11.261

Les changements notables dans cette version incluent :

  • [ARM64] Correction du comportement des instructions SXTL, SQXTN2, SQXTUN2, UQXTN2, XTN2 et TRN1 lorsque le registre de destination est utilisé comme source.
  • [ARM64] Correction d’un problème qui faisait que le débogueur affichait les registres SIMD avec leurs 64 bits inférieurs dupliqués dans les 64 bits supérieurs.
  • [AMD64] Corrections de l’émulation AVX512 pour les processeurs Zen4 d’AMD (les registres étaient corrompus).

Modifié

  • Implémentation d’un nouveau système de version spécifique à l’émulateur. (1.11.260)

Résolution

  • Correction des instructions ARM64 défectueuses où le registre de destination est également utilisé comme source. (1.11.261)
  • Correction de la solution de contournement Zen4 pour les retours directs vers l’émulateur. (1.11.222)

1.11.202

Cette version résout plusieurs problèmes rencontrés lors du lancement des services d’enregistrement ou du processus de surveillance via le -monitor commutateur. Elle supprime également le support d’enregistrement ARM32 du produit.

Modifié

  • Réduit la taille binaire en reliant les composants TTD à UCRT en tant que DLL. (1.11.191)

Résolution

  • Correction de l’enregistrement des services. (1.11.193)
  • Correction de plusieurs problèmes lors de l’utilisation de -monitor. (1.11.189)
  • Correction du cadre de pile de la fonction qui préserve les non volatiles lors de l’exécution de secours sur x64 (1.11.188)
  • Réactivation de la mise en mémoire tampon de sortie pour TTD (1.11.187)
  • Correction de la manipulation de la poignée du GPO dans le ProcessMonitorServer (1.11.179)

Supprimé(e)

  • Suppression du code d’enregistrement ARM32 du dépôt (1.11.198)

1.11.173

Cette version augmente la visibilité de certains messages d’erreur en les extrayant du fichier .out et en les imprimant dans la console. Elle corrige également un crash rare lors de la ré-exécution de la trace.

Modifié

  • Extrait et imprime les messages d’erreur à partir du fichier .out (1.11.173)

Résolution

  • Corrigez le conflit de fichiers lors de la lecture du fichier .out à partir d’un processus distinct. (1.11.171)
  • Correction du crash rare lors de la ré-exécution de la trace. (1.11.166)

1.11.163

Cette version ajoute la prise en charge de l’enregistrement des processus x86 sur les machines x64.

Modifié

  • Correction de l’enregistrement x86 avec une installation TTD x64 (1.11.163)

Résolution

  • Nettoyage de l’EULA (1.11.161)

1.11.159

Cette version est la première version publique de l’enregistreur en ligne de commande. En plus de plusieurs modifications nécessaires pour activer la publication publique de l’enregistreur de ligne de commande, cette version inclut également plusieurs correctifs de bogues, y compris quelques correctifs sur l’émulateur de processeur.

Le nouveau commutateur -timestampFileName active la génération de fichiers .run basée sur l’horodatage. Ce commutateur est utile lorsque vous enregistrez de nombreuses instances du même processus et que vous souhaitez réduire le temps de démarrage de l’enregistrement.

Modifié

  • Choisissez le mode d’injection par défaut à l’exécution en fonction du traceur utilisé (1.11.156)
  • Ajoutez un commutateur pour activer la génération de fichiers .run basés sur les horodatages (1.11.155)
  • Ajoutez l’EULA et -accepteula à TTD (1.11.154)
  • Ajoutez ProcLaunchMon.sys à MSIX (1.11.153)
  • Créez un MSIX par arch et MSIXBUNDLE (1.11.152)
  • Corrigez plusieurs problèmes qui se sont produit lors du test TTD généré avec Clang. (1.11.146)
  • Corrections de Clang pour TTDAnalyze (1.11.144)

Résolution

  • Retours sur le feedback concernant l’installateur d’applications / publication publique (1.11.159)
  • Feedback sur la RC (1.11.157)
  • Évitez de détruire le registre Zero en initialisant RegisterInfo pour pointer vers Sink. (1.11.149)
  • Corrigez l’instruction TST avec immédiat et améliorez le test unitaire pour la couvrir et plus encore. (1.11.148)
  • Consolidez la décision de processus protégé et désactivez l’utilisation de processus protégés (1.11.147)

1.11.138

Modifié

  • Créez un enregistreur MSIX (1.11.138)
  • Corrigez tous les problèmes afin que Clang puisse construire TTD. (1.11.137)
  • Introduisez -monitor X comme moyen d’enregistrer un processus lors de son lancement (1.11.116)

Résolution

  • Corrigez l’émulation « CMP ZR » ARM64 (1.11.128)
  • Corrigez l’émulation AVX512 sur les processeurs Zen4 d’AMD (1.11.127)
  • Corrigez le mécanisme utilisé par TTD pour trouver des fichiers pour un CPU spécifique (1.11.121)
  • Corrigez la régression TTD x86 (TTDRecordCPU.dll ne parvient pas à charger) (1.11.110)
  • Corrigez le retour au chemin natif sur ARM64 pour ne pas corrompre X28 (1.11.109)

Voir aussi

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

Débogage de voyage dans le temps – Enregistreur de ligne de commande