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.