Sintassi multiprocessore

KD e WinDbg in modalità kernel supportano più debug del processore. È possibile eseguire questo tipo di debug in qualsiasi piattaforma multiprocessore.

I processori sono numerati zero attraverso n.

Se il processore corrente è processore 0 (ovvero, se è il processore che attualmente ha causato l'attività del debugger), è possibile esaminare gli altri processori non correnti (processori uno tramite n). Tuttavia, non è possibile modificare nulla nei processori non correnti. È possibile visualizzare solo lo stato.

Selezione di un processore

È possibile usare il comando echocpunum (Mostra numero CPU) per visualizzare i numeri di processore del processore corrente. L'output di questo comando consente di indicare immediatamente quando si lavora su un sistema a più processori dal testo nel prompt del debug del kernel.

Nell'esempio seguente 0: davanti al prompt kd> indica che si sta eseguendo il debug del primo processore nel computer.

0: kd>

Usare il comando ~s (Change Current Processor) per passare tra processori, come illustrato nell'esempio seguente.

0: kd> ~1s
1: kd>

A questo punto si esegue il debug del secondo processore nel computer.

Potrebbe essere necessario modificare i processori in un sistema multiprocessore se si verifica un'interruzione e non è possibile comprendere la traccia dello stack. L'interruzione potrebbe verificarsi in un processore diverso.

Specifica dei processori in altri comandi

È possibile aggiungere un numero di processore prima di diversi comandi. Questo numero non è preceduto da una tilde (~), tranne nel comando ~S .

Nota Nel debug in modalità utente viene usata la tilde per specificare i thread. Per altre informazioni su questa sintassi, vedere Sintassi thread.

Gli ID processore non devono essere indicati in modo esplicito. È invece possibile usare un'espressione numerica che si risolve in un numero intero che corrisponde a un ID processore. Per indicare che l'espressione deve essere interpretata come processore, usare la sintassi seguente.

||[Expression]

In questa sintassi sono necessarie le parentesi quadre e Expression si trova per qualsiasi espressione numerica che si risolve in un numero intero che corrisponde a un ID processore.

Nell'esempio seguente il processore cambia a seconda del valore di un pseudoregistrato definito dall'utente.

||[@$t0]

Esempi:

Nell'esempio seguente viene usato il comando k (Display Stack Backtrace) per visualizzare una traccia dello stack da due processori.

1: kd> 2k 

Nell'esempio seguente viene usato il comando r (Registers) per visualizzare il registro eax del processore tre.

1: kd> 3r eax 

Tuttavia, il comando seguente fornisce un errore di sintassi, perché non è possibile modificare lo stato di un processore diverso dal processore corrente.

1: kd> 3r eax=808080 

Interruzione

Durante il debug del kernel, i comandi bp, bu, bm (Set Breakpoint) e ba (Break on Access) si applicano a tutti i processori di un computer a più processori.

Ad esempio, se il processore corrente è tre, è possibile immettere il comando seguente per inserire un punto di interruzione in SomeAddress.

1: kd> bp SomeAddress 

Quindi, qualsiasi processore (non solo processore) che viene eseguito in tale indirizzo causa una trappola del punto di interruzione.

Visualizzazione delle informazioni sul processore

È possibile usare l'estensione !running per visualizzare lo stato di ogni processore nel computer di destinazione. Per ogni processore, !in esecuzione può anche visualizzare i campi di thread correnti e successivi dal blocco di controllo del processo (PRCB), lo stato dei 16 spinlock in coda predefiniti e una traccia dello stack.

È possibile usare le estensioni !cpuinfo e !cpuid per visualizzare informazioni sui processori stessi.