Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
KD e WinDbg in modalità kernel supportano il debug di più processori. È possibile eseguire questo tipo di debug in qualsiasi piattaforma multiprocessore.
I processori sono numerati da zero a n.
Se il processore corrente è processore 0 (ovvero, se è il processore che ha attualmente causato l'attività del debugger), è possibile esaminare gli altri processori non correnti (processori da uno a n). Tuttavia, non è possibile modificare nulla nei processori non correnti. È possibile visualizzare solo il loro stato.
Selezione di un processore
È possibile usare il comando .echocpunum (Show CPU Number) per visualizzare i numeri del processore corrente. L'output di questo comando permette di determinare immediatamente se si sta lavorando su un sistema a più processori grazie al testo nel prompt di 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 (Cambia processore corrente) per passare da un processore all'altro, come illustrato nell'esempio seguente.
0: kd> ~1s
1: kd>
A questo punto si sta eseguendo 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 l'analisi dello stack. L'interruzione potrebbe essersi verificata 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, la tilde viene usata per specificare i thread. Per altre informazioni su questa sintassi, vedere Sintassi dei 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 ed Expression è l'acronimo di 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 uno pseudoregistro definito dall'utente.
||[@$t0]
Esempi di
Nell'esempio seguente viene usato il comando k (Display Stack Backtrace) per visualizzare un'analisi dello stack da due processori.
1: kd> 2k
Nell'esempio seguente viene usato il comando r (Registers) per visualizzare il registro eax del processore 3.
1: kd> 3r eax
Tuttavia, il comando seguente restituisce 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 il processore uno) che esegue a tale indirizzo provoca un trap di breakpoint.
Visualizzazione delle informazioni sul processore
È possibile usare l'estensione !running per visualizzare lo stato di ogni processore nel computer di destinazione. Per ogni processore, !running può anche visualizzare i campi del thread corrente e successivo dal blocco di controllo del processo (PRCB), lo stato dei 16 spinlock in coda predefiniti e un'analisi dello stack.
È possibile usare le estensioni !cpuinfo e !cpuid per visualizzare informazioni sui processori stessi.