Sintaxis de varios procesadores

KD y el modo kernel WinDbg admiten la depuración de varios procesadores. Puede realizar este tipo de depuración en cualquier plataforma multiprocesador.

Los procesadores tienen un número cero a n.

Si el procesador actual es el procesador 0 (es decir, si es el procesador que actualmente ha provocado que el depurador esté activo), puede examinar los demás procesadores no actuales (procesadores uno a n). Sin embargo, no puede cambiar nada en los procesadores no actuales. Solo puede ver su estado.

Selección de un procesador

Puede usar el comando .echocpunum (Mostrar número de CPU) para mostrar los números de procesador del procesador actual. La salida de este comando le permite indicar inmediatamente cuándo está trabajando en un sistema de varios procesadores mediante el texto del símbolo del sistema de depuración del kernel.

En el ejemplo siguiente, 0: delante del símbolo del sistema kd> indica que está depurando el primer procesador del equipo.

0: kd>

Use el comando ~s (Cambiar procesador actual) para cambiar entre procesadores, como se muestra en el ejemplo siguiente.

0: kd> ~1s
1: kd>

Ahora está depurando el segundo procesador en el equipo.

Es posible que tenga que cambiar los procesadores en un sistema multiprocesador si encuentra una interrupción y no puede comprender el seguimiento de la pila. Es posible que la interrupción se haya producido en un procesador diferente.

Especificar procesadores en otros comandos

Puede agregar un número de procesador antes de varios comandos. Este número no va precedido de una tilde (~), excepto en el comando ~S .

Nota En la depuración en modo de usuario, la tilde se usa para especificar subprocesos. Para obtener más información sobre esta sintaxis, vea Sintaxis de subprocesos.

No es necesario hacer referencia a identificadores de procesador explícitamente. En su lugar, puede usar una expresión numérica que se resuelva en un entero que corresponda a un identificador de procesador. Para indicar que la expresión debe interpretarse como procesador, use la sintaxis siguiente.

||[Expression]

En esta sintaxis, se requieren corchetes y Expression significa cualquier expresión numérica que se resuelva en un entero que corresponda a un identificador de procesador.

En el ejemplo siguiente, el procesador cambia según el valor de un pseudo-register definido por el usuario.

||[@$t0]

Ejemplos

En el ejemplo siguiente se usa el comando k (Display Stack Backtrace) para mostrar un seguimiento de pila del procesador dos.

1: kd> 2k 

En el ejemplo siguiente se usa el comando r (Registers) para mostrar el registro eax del procesador tres.

1: kd> 3r eax 

Sin embargo, el comando siguiente proporciona un error de sintaxis, ya que no se puede cambiar el estado de un procesador distinto del procesador actual.

1: kd> 3r eax=808080 

Interrupción

Durante la depuración del kernel, los comandos bp, bu, bm (Set Breakpoint) y ba (Break on Access) se aplican a todos los procesadores de un equipo con varios procesadores.

Por ejemplo, si el procesador actual es tres, puede escribir el siguiente comando para colocar un punto de interrupción en SomeAddress.

1: kd> bp SomeAddress 

A continuación, cualquier procesador (no solo el procesador uno) que se ejecuta en esa dirección provoca una captura de punto de interrupción.

Mostrar información del procesador

Puede usar la extensión !running para mostrar el estado de cada procesador en el equipo de destino. Para cada procesador, !running también puede mostrar los campos de subproceso actuales y siguientes del bloque de control de proceso (PRCB), el estado de los 16 bloqueos de número en cola integrados y un seguimiento de pila.

Puede usar las extensiones !cpuinfo y !cpuid para mostrar información sobre los propios procesadores.