Depuración de viajes de tiempo: reproducción de un seguimiento
En esta sección se describe cómo reproducir seguimientos de viajes en tiempo, navegar hacia delante y hacia atrás en el tiempo.
Navegación de desplazamiento en tiempo de comandos
Use un signo menos final con los siguientes comandos para volver a viajar en el tiempo.
Get-Help |
---|
p- (Retroceder) |
t- (Seguimiento atrás) |
g- (Volver atrás) |
Para obtener más información, vea Time Travel Debugging - Navigation commands(Depuración de viajes de tiempo: comandos de navegación).
Navegación de desplazamiento de tiempo del botón de la cinta
Como alternativa, use los botones de la cinta de opciones para navegar en el seguimiento.
Reproducción de seguimiento TTD de ejemplo
Use el comando g- para ejecutarse hacia atrás hasta que se alcance un evento o el principio del seguimiento TTD. Los eventos que pueden detener la ejecución hacia atrás son los mismos que detendrían la ejecución hacia delante. En este ejemplo, se alcanza el inicio del seguimiento.
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 el comando p (Paso) para avanzar en un seguimiento 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]
También puede usar el comando t (Trace) para navegar en el seguimiento.
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 el comando p- para retroceder hacia atrás en un seguimiento 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]
También puede usar el comando t- para navegar hacia atrás en el tiempo.
Comandos de navegación !tt
Use el comando !tt para navegar hacia delante o hacia atrás en el tiempo; para ello, omita una posición determinada en el seguimiento.
!tt [posición]
Proporcione una posición de tiempo en cualquiera de los siguientes formatos para viajar a ese momento dado.
Si [position] es un número decimal entre 0 y 100, viaja a aproximadamente ese porcentaje en el seguimiento. Por ejemplo
!tt 50
, viaja a la mitad del seguimiento.Si {position} es #:#, donde # es un número hexadecimal, viaja a esa posición. Por ejemplo,
!tt 1A0:12F
viaja a la posición 1A0:12F en el seguimiento.
Para obtener más información, vea Time Travel Debugging - !tt (time travel).
!Posiciones
Use !positions
para mostrar todos los subprocesos activos, incluida su posición en el seguimiento. Para obtener más información, vea Time Travel Debugging - !positions (time travel)).
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
En este ejemplo se muestra que hay ocho subprocesos en la posición actual. El subproceso actual es 3604, marcado con ">".
Sugerencia
Otra manera de mostrar la lista actual de subprocesos y sus posiciones es usar el comando dx del modelo de datos:
dx -g @$curprocess.Threads.Select(t => new { IsCurrent = t.Id == @$curthread.Id, ThreadId = t.Id, Position = t.TTD.Position })
Use el comando modo de usuario ~ (Estado de subproceso) que muestra los mismos ocho subprocesos y marca el subproceso actual con '.':
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
En la salida del comando !positions, haga clic en el vínculo situado junto al tercer subproceso (3FFC), para desplazarse a esa posición en el seguimiento, 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 el comando ~ (Estado del subproceso) para confirmar que ahora estamos colocados en el tercer subproceso, 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
Nota
~s#, donde # es un número de subproceso, también cambia al subproceso especificado, pero no cambia la posición actual en el seguimiento. Cuando se usa !tt para desplazarse por el tiempo a la posición de otro subproceso, los valores leídos (y el depurador) leídos de la memoria se buscarán en esa posición. Al cambiar de subprocesos con ~s#, el depurador no cambia internamente la posición actual, que se usa para todas las consultas de memoria. Esto funciona de esta manera principalmente para que ~s# no tenga que restablecer el bucle interno del depurador.
Comandos de extensión de depuración de recorrido de tiempo
Para obtener información sobre !tt
y !positions
los !index
comandos, vea Time Travel Debugging - Extension Commands.
Consulte también
Depuración de viajes de tiempo: información general
Depuración de viajes de tiempo: registro de un seguimiento
Depuración de viajes de tiempo: trabajar con archivos de seguimiento
Depuración de viajes en tiempo: tutorial de aplicación de ejemplo