Dela via


Felsökning av tidsresor – Spela upp en spårning igen

Logga för felsökning av tidsresor med en klocka.

I det här avsnittet beskrivs hur du spelar upp spårningar av tidsresor, navigerar framåt och bakåt i tiden.

Kommandon för tidsresenavigering

Använd ett avslutande minustecken med följande kommandon för att resa tillbaka i tiden.

Befallning
p- (Steg tillbaka)
t- (Spåra tillbaka)
g- (Gå tillbaka)

Mer information finns i Felsökning av tidsresor – navigeringskommandon.

Navigering för tidsresa i menyfliksområdet

Du kan också använda knapparna i menyfliksområdet för att navigera i spårningen.

Skärmbild av knapparna Go, Go Back, Step och Step back i menyfliksområdet.

Exempel på TTD-spårningsuppspelning

Använd g-kommandot för att köra bakåt tills antingen en händelse eller början av TTD-spårningen har nåtts. De händelser som kan stoppa bakåtkörningen är desamma som skulle stoppa körningen framåt. I det här exemplet nås början av spårningen.

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

Använd kommandot p (Steg) för att gå vidare i en TTD-spårning.

0:000> p
Time Travel Position: F:1
ntdll!LdrpInitializeProcess+0x1bc5:
7774f828 740b            je      ntdll!LdrpInitializeProcess+0x1bd2 (7774f835) [br=1]
0:000> p
Time Travel Position: F:2
ntdll!LdrpInitializeProcess+0x1bd2:
7774f835 83bdd0feffff00  cmp     dword ptr [ebp-130h],0 ss:002b:010ff454=00000000
0:000> p
Time Travel Position: F:3
ntdll!LdrpInitializeProcess+0x1bd9:
7774f83c 0f8450e8ffff    je      ntdll!LdrpInitializeProcess+0x42f (7774e092) [br=1]

Du kan också använda kommandot t (Trace) för att navigera i spårningen.

0:000> t
Time Travel Position: F:4
ntdll!LdrpInitializeProcess+0x42f:
7774e092 33c0            xor     eax,eax
0:000> t
Time Travel Position: F:5
ntdll!LdrpInitializeProcess+0x431:
7774e094 e9f5170000      jmp     ntdll!LdrpInitializeProcess+0x1c2b (7774f88e)

Använd p-kommandot för att gå bakåt i en TTD-spårning.

0:000> p-
Time Travel Position: F:4
ntdll!LdrpInitializeProcess+0x42f:
7774e092 33c0            xor     eax,eax
0:000> p-
Time Travel Position: F:3
ntdll!LdrpInitializeProcess+0x1bd9:
7774f83c 0f8450e8ffff    je      ntdll!LdrpInitializeProcess+0x42f (7774e092) [br=1]

Du kan också använda t-kommandot för att navigera bakåt i tiden.

!tt-navigeringskommandon

Använd kommandot !tt för att navigera framåt eller bakåt i tiden genom att hoppa över till en viss position i spårningen.

!tt [position]

Ange en tidsposition i något av följande format för att resa till den tidpunkten.

  • Om [position] är ett decimaltal mellan 0 och 100, förflyttas det ungefär den procenten längs spårningen. Till exempel !tt 50 rör sig till halvvägs igenom spåret.

  • Om {position} är #:#, där # är ett hexadecimalt tal, överförs det till den positionen. Till exempel !tt 1A0:12F reser till position 1A0:12F i spårningen.

Mer information finns i Felsökning av tidsresor – !tt (tidsresa).

!Positioner

Använd !positions för att visa alla aktiva trådar, inklusive deras position i spårningen. Mer information finns i Felsökning av tidsresor – !positioner (tidsresor).

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

Det här exemplet visar att det finns åtta trådar på den aktuella positionen. Den aktuella tråden är 3604, markerad med ">".

Tips/Råd

Ett annat sätt att visa den aktuella listan över trådar och deras positioner är att använda dx-kommandot datamodell:

dx -g @$curprocess.Threads.Select(t => new { IsCurrent = t.Id == @$curthread.Id, ThreadId = t.Id, Position = t.TTD.Position })

Använd kommandot user mode ~ (Thread Status) visar samma åtta trådar och markerar den aktuella tråden med ".":

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

I kommandot !positions klickar du på länken bredvid den tredje tråden (3FFC) för att tidsresa till den positionen i spåret, 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
ntdll!NtWaitForWorkViaWorkerFactory+0xc:
7775396c c21400          ret     14h

Använd kommandot ~ (trådstatus) för att bekräfta att vi nu är placerade i den tredje tråden, 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

Anmärkning

~s#, där # är ett trådnummer, växlar också till den angivna tråden, men den ändrar inte den aktuella positionen i spårningen. När !tt används för tidsresor till en annan tråds position, kommer alla värden som du (och felsökaren) läser från minnet att letas upp på den positionen. När du växlar trådar med ~s# ändrar felsökaren inte den aktuella positionen internt, som används för alla minnesfrågor. Detta fungerar främst på det här sättet så att ~s# inte behöver återställa felsökningsprogrammets inre loop.

Tidsresefelsökningstilläggskommandon

Information om kommandona !tt, !positions och !index finns i Time Travel Debugging – Extension Commands (Felsökning av tidsresor – tilläggskommandon).

Se även

Felsökning av tidsresande – Översikt

Felsökning av tidsresor – Registrera en spårning

Felsökning av tidsresor – Arbeta med spårningsfiler

Felsökning av tidsresor – Genomgång av exempelapp