Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Esta seção descreve como reproduzir traços de viagem no tempo, navegando para frente e para trás no tempo.
Comando navegação de viagem no tempo
Utilize um sinal de menos no final com os seguintes comandos para voltar no tempo.
| Comando |
|---|
| p- (Passo atrás) |
| t- (Retrocesso) |
| g- (Voltar) |
Para obter mais informações, consulte Depuração de viagem no tempo - Comandos de navegação.
Navegação no tempo através do botão da faixa
Como alternativa, use os botões da faixa de opções para navegar no traço.
Exemplo de Reprodução de Rastreio TTD
Utilize o comando g- para executar para trás até que um evento ou o início do traço TTD seja alcançado. Os eventos que podem parar a execução retroativa são os mesmos que interromperiam a execução para frente. Neste exemplo, o início do rastreamento é alcançado.
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
Use o comando p (Step) para avançar em um rastreamento TTD.
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]
Você também pode usar o comando t (Trace) para navegar no rastreamento.
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)
Use o comando p- para retroceder em um rastreamento TTD.
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]
Você também pode usar o comando t- para navegar para trás no tempo.
!tt comandos de navegação
Use o comando !tt para avançar ou retroceder no tempo, saltando para uma determinada posição no rasto.
!tt [posição]
Forneça uma posição temporal em qualquer um dos seguintes formatos para viajar até aquele momento no tempo.
Se [position] é um número decimal entre 0 e 100, ele avança até aproximadamente essa percentagem ao longo do percurso. Por exemplo
!tt 50, viaja até a metade do traço.Se {position} é #:#, onde # é um número hexadecimal, ele viaja para essa posição. Por exemplo,
!tt 1A0:12Fmove-se para a posição 1A0:12F no traço.
Para obter mais informações, consulte Depuração de Viagem no Tempo - !tt (viagem no tempo).
!posições
Use !positions para exibir todos os threads ativos, incluindo sua posição no rastreamento. Para mais informações, consulte Time Travel Debugging - !positions (viagem no tempo).
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
Este exemplo mostra que há oito threads na posição atual. O segmento atual é 3604, marcado com '>'.
Sugestão
Outra maneira de exibir a lista atual de threads e suas posições, é usar o comando data model dx:
dx -g @$curprocess.Threads.Select(t => new { IsCurrent = t.Id == @$curthread.Id, ThreadId = t.Id, Position = t.TTD.Position })
Use o comando user mode ~ (Thread Status) mostra os mesmos oito threads e marca o thread atual com '.':
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
Na saída do comando !positions, clique no link ao lado do terceiro thread (3FFC), para viajar no tempo até essa posição no rastreamento, 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
Use o comando ~ (Thread Status) para confirmar que agora estamos posicionados no terceiro 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
Observação
O ~s#, onde # é um número de thread, também alterna para o thread fornecido, mas não altera a posição atual no rastreamento. Quando !tt é usado para viajar no tempo para a posição de outro thread, quaisquer valores que você (e o depurador) ler da memória serão pesquisados nessa posição. Ao alternar threads com ~s#, o depurador não altera internamente a posição atual, que é usada para todas as consultas de memória. Isso funciona dessa forma principalmente para que ~s# não precise redefinir o loop interno do depurador.
Comandos da extensão de depuração para viagem no tempo
Para obter informações sobre os comandos !tt, !positions e !index, consulte Depuração de Viagem no Tempo - Comandos de Extensão.
Ver também
Depuração de Time Travel - Visão Geral
Depuração de deslocamento temporal - Gravar um traço
Depuração Temporal - Trabalhando com ficheiros de rastreio
Depuração de viagem no tempo - Exemplo de passo a passo do aplicativo