Aracılığıyla paylaş


Zaman Yolculuğu Hata Ayıklama - İz kaydını yeniden oynatma

"Zaman yolculuğu hata ayıklama logosu, bir saat içerir ."

Bu bölümde, zaman yolculuğu izlerini yeniden izleme, zamanda ileriye ve geriye doğru gezinme açıklanmaktadır.

Zaman yolculuğu navigasyonunu kontrol et

Zamanda geriye gitmek için aşağıdaki komutlarla sondaki eksi işaretini kullanın.

Komut
p- (Geri Adım)
t- (Geri İzle)
g- (Geri Dön)

Daha fazla bilgi için bkz. Zaman Yolculuğu Hata Ayıklama - Gezinti komutları.

Şerit düğmesi zaman yolculuğu gezintisi

Alternatif olarak, izlemede gezinmek için şerit düğmelerini kullanın.

Şeritteki Git, Geri Git, Adım ve Geri adım düğmelerinin ekran görüntüsü.

Örnek TTD İzleme Tekrar Oynatma

Bir olaya veya TTD izlemesinin başına ulaşılana kadar geriye doğru yürütmek için g- komutunu kullanın. Geriye dönük yürütmeyi durdurabilen olaylar, ileriye doğru yürütmeyi durduran olaylarla aynıdır. Bu örnekte takip sürecinin başlangıcına ulaşıyoruz.

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

TTD izlemesinde ileri gitmek için p (Adım) komutunu kullanın.

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]

İzlemede gezinmek için t (İzleme) komutunu da kullanabilirsiniz.

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)

TTD izlemesinde geri gitmek için p- komutunu kullanın.

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]

Zamanda geriye gitmek için t- komutunu da kullanabilirsiniz.

!tt gezinti komutları

İzlemede belirli bir konuma atlayarak zaman içinde ileri veya geri gitmek için !tt komutunu kullanın.

Konum [pozisyon]

Bu zaman noktasına gitmek için aşağıdaki biçimlerden herhangi birinde bir zaman noktası sağlayın.

  • [position] değeri 0 ile 100 arasında bir ondalık sayıysa, yaklaşık olarak bu yüzdeyi izleme içine alır. Örneğin !tt 50 , izlemenin yarısına seyahat eder.

  • Eğer {position} #:# ise ve burada # bir onaltılık sayıysa, o konuma gider. Örneğin, !tt 1A0:12F izlemedeki 1A0:12F konumuna seyahat eder.

Daha fazla bilgi için bkz. Zaman Yolculuğu Hata Ayıklama - !tt (zaman yolculuğu).

!Pozisyonlar

Tüm etkin iş parçacıklarını, izleme içindeki konumlarıyla birlikte görüntülemek için !positions kullanın. Daha fazla bilgi için bkz. Zaman Yolculuğu Hata Ayıklama - !positions (zaman yolculuğu).

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

Bu örnek, geçerli konumda sekiz iş parçacığı olduğunu gösterir. Geçerli iplik 3604'tür ve '>' ile işaretlenmiştir.

İpucu

İş parçacıklarının ve konumlarının geçerli listesini görüntülemenin bir diğer yolu da veri modeli dx komutunu kullanmaktır:

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

Kullanıcı modu ~ (İş Parçacığı Durumu) komutunu kullanın, aynı sekiz iş parçacığını gösterir ve geçerli iş parçacığını '.' ile işaretler:

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

!positions komut çıkışında üçüncü iş parçacığının (3FFC) yanındaki bağlantıya tıklayarak izlemedeki 200:0 konumuna zaman yolculuğu yapın.

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

Artık üçüncü iş parçacığı olan 3ffc'de konumlandırıldığını onaylamak için ~ (İş Parçacığı Durumu) komutunu kullanın.

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

Uyarı

Numarası # olan ~s# iş parçacığı, verilen iş parçacığına geçer ancak izleme işlemindeki mevcut konumu değiştirmez. !tt, başka bir iş parçacığının konumuna zaman yolculuğu yapmak için kullanıldığında, bellekten sizin ve hata ayıklayıcının okuduğu tüm değerler o konumda sorgulanır. ~s# ile iş parçacıkları arasında geçiş yaparken, hata ayıklayıcı tüm bellek sorguları için kullanılan geçerli konumu dahili olarak değiştirmez. Bu, ~s# öğesinin hata ayıklayıcının iç döngüsünü sıfırlaması gerekmeyecek şekilde öncelikli olarak bu şekilde çalışır.

Zaman yolculuğu hata ayıklama uzantısı komutları

!tt, !positions ve !index komutları hakkında bilgi için bkz. Zaman Yolculuğu Hata Ayıklama - Uzantı Komutları.

Ayrıca Bkz.

Zaman Yolculuğu Hata Giderme - Genel Bakış

Zaman Yolculuğu Hata Ayıklama - İz Kaydı Oluşturma

Zaman Yolculuğu Hata Ayıklama - İz dosyalarıyla çalışma

Zaman Yolculuğu Hata Ayıklama - Örnek Uygulama Rehberi