Bagikan melalui


Penelusuran Kesalahan Perjalanan Waktu - Memutar ulang pelacakan

Logo penelusuran kesalahan perjalanan waktu yang menampilkan jam.

Bagian ini menjelaskan cara memutar ulang jejak perjalanan waktu, menavigasi maju dan mundur ke waktu.

Navigasi perjalanan waktu perintah

Gunakan tanda minus berikutnya dengan perintah berikut untuk melakukan perjalanan kembali ke waktu.

Perintah
p- (Langkah Mundur)
t- (Lacak Mundur)
g- (Kembali)

Untuk informasi selengkapnya, lihat Penelusuran Kesalahan Perjalanan Waktu - Perintah navigasi.

Navigasi perjalanan waktu tombol pita

Atau, gunakan tombol pita untuk menavigasi di jejak.

Cuplikan layar tombol Kembali, Mundur, Langkah, dan Mundur di pita.

Contoh Pemutaran Ulang Pelacakan TTD

Gunakan perintah g- untuk menjalankan mundur hingga peristiwa atau awal jejak TTD tercapai. Peristiwa yang dapat menghentikan eksekusi mundur adalah sama yang akan menghentikan eksekusi ke depan. Dalam contoh ini, awal jejak tercapai.

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

Gunakan perintah p (Langkah) untuk melangkah maju dalam jejak 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]

Anda juga dapat menggunakan perintah t (Trace) untuk menavigasi di jejak.

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)

Gunakan perintah p- untuk melangkah mundur dalam jejak 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]

Anda juga dapat menggunakan perintah t- untuk menavigasi mundur ke waktu.

!tt perintah navigasi

Gunakan perintah !tt untuk menavigasi maju atau mundur dalam waktu, dengan melompat ke posisi tertentu dalam jejak.

!tt [posisi]

Berikan posisi waktu dalam salah satu format berikut untuk melakukan perjalanan ke titik waktu tersebut.

  • Jika [posisi] adalah angka desimal antara 0 dan 100, ia melakukan perjalanan ke sekitar persentase itu ke dalam jejak. Misalnya !tt 50 perjalanan ke setengah jalan melalui jejak.

  • Jika {position} adalah #:#, di mana # adalah angka heksadesimal, ia akan menuju ke posisi tersebut. Misalnya, !tt 1A0:12F perjalanan ke posisi 1A0:12F dalam jejak.

Untuk informasi selengkapnya, lihat Penelusuran Kesalahan Perjalanan Waktu - !tt (perjalanan waktu).

!Posisi

Gunakan !positions untuk menampilkan semua utas aktif, termasuk posisinya dalam jejak. Untuk informasi selengkapnya, lihat Penelusuran Kesalahan Perjalanan Waktu - !posisi (perjalanan waktu).

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

Contoh ini menunjukkan bahwa ada delapan utas pada posisi saat ini. Utas saat ini adalah 3604, ditandai dengan '>'.

Tip

Cara lain untuk menampilkan daftar utas saat ini dan posisinya, adalah dengan menggunakan perintah dx model data:

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

Gunakan perintah mode pengguna ~ (Status Utas) menunjukkan delapan utas yang sama, dan menandai utas saat ini dengan '.':

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

Dalam output perintah !positions, klik tautan di samping utas ketiga (3FFC), untuk melakukan perjalanan waktu ke posisi tersebut di jejak, 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

Gunakan perintah ~ (Status Utas) untuk mengonfirmasi bahwa kita sekarang diposisikan di utas ketiga, 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

Catatan

~s#, di mana # adalah nomor utas, juga beralih ke utas yang diberikan, tetapi tidak mengubah posisi saat ini dalam pelacakan. Ketika !tt digunakan untuk perjalanan waktu ke posisi utas lain, nilai apa pun yang Anda (dan debugger) baca dari memori akan dicari pada posisi tersebut. Saat beralih utas dengan ~s#, debugger tidak mengubah posisi saat ini secara internal, yang digunakan untuk semua kueri memori. Ini bekerja dengan cara ini terutama sehingga ~s# tidak perlu mengatur ulang perulangan dalam debugger.

Perintah ekstensi penelusuran kesalahan perjalanan waktu

Untuk informasi tentang !tt, !positions dan !index perintah lihat Penelusuran Kesalahan Perjalanan Waktu - Perintah Ekstensi.

Lihat juga

Penelusuran Kesalahan Perjalanan Waktu - Gambaran Umum

Penelusuran Kesalahan Perjalanan Waktu - Merekam jejak

Penelusuran Kesalahan Perjalanan Waktu - Bekerja dengan file pelacakan

Penelusuran Kesalahan Perjalanan Waktu - Contoh Panduan Aplikasi