Condividi tramite


Sintassi multiprocessore

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.