Débogage de voyage dans le temps - Relire une trace
Cette section explique comment relire les traces de voyage dans le temps, en naviguant vers l’avant et vers l’arrière dans le temps.
Navigation dans le temps des commandes
Utilisez un signe moins de fin avec les commandes suivantes pour remonter dans le temps.
Commande |
---|
p- (Retour en arrière) |
t- (Trace Back) |
g- (Retour en arrière) |
Pour plus d’informations, consultez Débogage de voyage dans le temps - Commandes de navigation.
Navigation de voyage dans le temps du bouton du ruban
Vous pouvez également utiliser les boutons du ruban pour naviguer dans la trace.
Exemple de relecture de trace TTD
Utilisez la commande g- pour exécuter vers l’arrière jusqu’à ce qu’un événement ou le début de la trace TTD soit atteint. Les événements qui peuvent arrêter l’exécution descendante sont les mêmes qui arrêteraient l’exécution en avant. Dans cet exemple, le début de la trace est atteint.
0:000> g-
TTD: Start of trace reached.
(3f78.4274): Break instruction exception - code 80000003 (first/second chance not available)
Time Travel Position: 29:0
ntdll!ZwTestAlert+0x14:
00007ffc`61f789d4 c3 ret
Utilisez la commande p (Étape) pour avancer dans une trace TTD.
0:000> p
Time Travel Position: F:1
eax=0173a5b0 ebx=00fd8000 ecx=7774f821 edx=0f994afc esi=0f99137c edi=00de0000
eip=7774f828 esp=010ff34c ebp=010ff584 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpInitializeProcess+0x1bc5:
7774f828 740b je ntdll!LdrpInitializeProcess+0x1bd2 (7774f835) [br=1]
0:000> p
Time Travel Position: F:2
eax=0173a5b0 ebx=00fd8000 ecx=7774f821 edx=0f994afc esi=0f99137c edi=00de0000
eip=7774f835 esp=010ff34c ebp=010ff584 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpInitializeProcess+0x1bd2:
7774f835 83bdd0feffff00 cmp dword ptr [ebp-130h],0 ss:002b:010ff454=00000000
0:000> p
Time Travel Position: F:3
eax=0173a5b0 ebx=00fd8000 ecx=7774f821 edx=0f994afc esi=0f99137c edi=00de0000
eip=7774f83c esp=010ff34c ebp=010ff584 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpInitializeProcess+0x1bd9:
7774f83c 0f8450e8ffff je ntdll!LdrpInitializeProcess+0x42f (7774e092) [br=1]
Vous pouvez également utiliser la commande t (Trace) pour naviguer dans la trace.
0:000> t
Time Travel Position: F:4
eax=0173a5b0 ebx=00fd8000 ecx=7774f821 edx=0f994afc esi=0f99137c edi=00de0000
eip=7774e092 esp=010ff34c ebp=010ff584 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpInitializeProcess+0x42f:
7774e092 33c0 xor eax,eax
0:000> t
Time Travel Position: F:5
eax=00000000 ebx=00fd8000 ecx=7774f821 edx=0f994afc esi=0f99137c edi=00de0000
eip=7774e094 esp=010ff34c ebp=010ff584 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpInitializeProcess+0x431:
7774e094 e9f5170000 jmp ntdll!LdrpInitializeProcess+0x1c2b (7774f88e)
Utilisez la commande p- pour revenir en arrière dans une trace TTD.
0:000> p-
Time Travel Position: F:4
eax=0173a5b0 ebx=00fd8000 ecx=7774f821 edx=0f994afc esi=0f99137c edi=00de0000
eip=7774e092 esp=010ff34c ebp=010ff584 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpInitializeProcess+0x42f:
7774e092 33c0 xor eax,eax
0:000> p-
Time Travel Position: F:3
eax=0173a5b0 ebx=00fd8000 ecx=7774f821 edx=0f994afc esi=0f99137c edi=00de0000
eip=7774f83c esp=010ff34c ebp=010ff584 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpInitializeProcess+0x1bd9:
7774f83c 0f8450e8ffff je ntdll!LdrpInitializeProcess+0x42f (7774e092) [br=1]
Vous pouvez également utiliser la commande t- pour revenir en arrière dans le temps.
!tt commandes de navigation
Utilisez la commande !tt pour naviguer vers l’avant ou vers l’arrière dans le temps, en sautant à une position donnée dans la trace.
!tt [position]
Fournissez une position de temps dans l’un des formats suivants pour atteindre ce point dans le temps.
Si [position] est un nombre décimal compris entre 0 et 100, il atteint environ ce pourcentage dans la trace. Par exemple
!tt 50
, voyage jusqu’à la moitié de la trace.Si {position} a la valeur # :#, où # est un nombre hexadécimal, elle se déplace vers cette position. Par exemple,
!tt 1A0:12F
se déplace à la position 1A0 :12F dans la trace.
Pour plus d’informations, consultez Débogage des voyages dans le temps - !tt (voyage dans le temps).
!Positions
Utilisez !positions
pour afficher tous les threads actifs, y compris leur position dans la trace. Pour plus d’informations, consultez Débogage des voyages dans le temps - !positions (voyage dans le temps).
0:000> !positions
>*Thread ID=0x1C74 - Position: F:2
Thread ID=0x1750 - Position: A5:0
Thread ID=0x3FFC - Position: 200:0
Thread ID=0x36B8 - Position: 403:0
Thread ID=0x3BC4 - Position: 5F2:0
Thread ID=0x392C - Position: B45:0
Thread ID=0x32B4 - Position: C87:0
Thread ID=0x337C - Position: DF1:0
* indicates an actively running thread
Cet exemple montre qu’il existe huit threads à la position actuelle. Le thread actuel est 3604, marqué avec « ».>
Conseil
Une autre façon d’afficher la liste actuelle des threads et leurs positions consiste à utiliser la commande dx du modèle de données :
dx -g @$curprocess.Threads.Select(t => new { IsCurrent = t.Id == @$curthread.Id, ThreadId = t.Id, Position = t.TTD.Position })
Utilisez la commande mode utilisateur ~ (État du thread) qui affiche les mêmes huit threads et marque le thread actuel avec « . » :
0:000> ~
. 0 Id: 954.1c74 Suspend: 4096 Teb: 00fdb000 Unfrozen
1 Id: 954.1750 Suspend: 4096 Teb: 00fea000 Unfrozen
2 Id: 954.3ffc Suspend: 4096 Teb: 00fde000 Unfrozen
3 Id: 954.36b8 Suspend: 4096 Teb: 00fe1000 Unfrozen
4 Id: 954.3bc4 Suspend: 4096 Teb: 00fe4000 Unfrozen
5 Id: 954.392c Suspend: 4096 Teb: 00fed000 Unfrozen
6 Id: 954.32b4 Suspend: 4096 Teb: 00ff0000 Unfrozen
7 Id: 954.337c Suspend: 4096 Teb: 00ff3000 Unfrozen
Dans la sortie de la commande !positions, cliquez sur le lien en regard du troisième thread (3FFC) pour parcourir le temps jusqu’à cette position dans la trace, 200 :0.
0:002> !tt 200:0
Setting position: 200:0
(954.3ffc): Break instruction exception - code 80000003 (first/second chance not available)
Time Travel Position: 200:0
eax=00000000 ebx=012da718 ecx=7775396c edx=00000000 esi=012e1848 edi=012e1a08
eip=7775396c esp=014cf9f8 ebp=014cfbfc iopl=0 nv up ei ng nz ac po cy
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000293
ntdll!NtWaitForWorkViaWorkerFactory+0xc:
7775396c c21400 ret 14h
Utilisez la commande ~ (État du thread) pour confirmer que nous sommes maintenant positionnés sur le troisième thread, 3ffc.
0:002> ~
0 Id: 954.1c74 Suspend: 4096 Teb: 00fdb000 Unfrozen
1 Id: 954.1750 Suspend: 4096 Teb: 00fea000 Unfrozen
. 2 Id: 954.3ffc Suspend: 4096 Teb: 00fde000 Unfrozen
3 Id: 954.36b8 Suspend: 4096 Teb: 00fe1000 Unfrozen
4 Id: 954.3bc4 Suspend: 4096 Teb: 00fe4000 Unfrozen
5 Id: 954.392c Suspend: 4096 Teb: 00fed000 Unfrozen
6 Id: 954.32b4 Suspend: 4096 Teb: 00ff0000 Unfrozen
7 Id: 954.337c Suspend: 4096 Teb: 00ff3000 Unfrozen
Notes
Le ~s#, où # est un numéro de thread, bascule également vers le thread donné, mais il ne modifie pas la position actuelle dans la trace. Lorsque !tt est utilisé pour voyager dans le temps vers la position d’un autre thread, toutes les valeurs que vous (et le débogueur) avez lues à partir de la mémoire sont recherchées à cette position. Lors du basculement de threads avec ~s#, le débogueur ne modifie pas la position actuelle en interne, qui est utilisée pour toutes les requêtes de mémoire. Cela fonctionne principalement de cette façon afin que ~s# n’ait pas à réinitialiser la boucle interne du débogueur.
Commandes d’extension de débogage de voyage dans le temps
Pour plus d’informations sur , !tt
!positions
et les !index
commandes, consultez Débogage de voyage dans le temps - Commandes d’extension.
Voir aussi
Débogage de voyage dans le temps - Vue d’ensemble
Débogage de voyage dans le temps - Enregistrer une trace
Débogage de voyage dans le temps - Utilisation des fichiers de trace
Débogage de voyage dans le temps - Exemple de procédure pas à pas d’application
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour