Uso di KDbgCtrl
Lo strumento KDbgCtrl (Kernel Debugging Control, kdbgctrl.exe) può essere usato per controllare la connessione di debug del kernel dal computer di destinazione.
Per usare questo strumento, il computer di destinazione deve eseguire Windows Server 2003 o una versione successiva di Windows.
KDbgCtrl può controllare cinque impostazioni diverse: debug completo del kernel, debug automatico del kernel, gestione degli errori in modalità utente, blocco del debug del kernel e dimensioni del buffer DbgPrint.
Per usare KDbgCtrl, è necessario avere già abilitato il debug del kernel nelle impostazioni di avvio del computer di destinazione prima dell'ultimo avvio. Non è possibile usare KDbgCtrl per abilitare il debug del kernel se non è stato fatto. Per informazioni dettagliate su queste impostazioni di avvio, vedere Boot Parameters to Enable Debugging (Parametri di avvio per abilitare il debug).
Debug completo del kernel
Quando è abilitato il debug completo del kernel, un debugger del kernel in esecuzione nel computer host può entrare nel computer di destinazione. Se viene rilevata un'eccezione in modalità kernel, il computer di destinazione si interromperà nel debugger del kernel. Sono consentiti anche messaggi dalla destinazione all'host, ad esempio output DbgPrint , messaggi di caricamento dei simboli e debugger in modalità utente reindirizzati.
Se questa impostazione è disabilitata, tutti i segnali del computer host verranno ignorati dalla destinazione.
Il debug completo del kernel è abilitato per impostazione predefinita. Per controllare il valore dell'impostazione corrente, usare kdbgctrl -c. Per disabilitare questa impostazione, usare kdbgctrl -d. Per abilitare questa impostazione, usare kdbgctrl -e.
Se si vuole controllare l'impostazione corrente e usarla per controllare l'esecuzione all'interno di un file batch, è possibile usare il comando kdbgctrl -cx . Per informazioni dettagliate su questo comando, vedere Opzioni della riga di comando KDbgCtrl.
Debug automatico del kernel
Se il debug completo del kernel è abilitato, l'impostazione corrente per il debug automatico del kernel è irrilevante. Tutte le comunicazioni sono consentite.
Quando il debug completo del kernel è disabilitato e il debug automatico del kernel è abilitato, solo il computer di destinazione può avviare una connessione di debug.
In questo caso, verrà stabilita solo un'eccezione in modalità kernel, un punto di interruzione o un altro evento in modalità kernel. La connessione non verrà stabilita per l'output DbgPrint , i messaggi di caricamento dei simboli, l'input e l'output del debugger in modalità utente reindirizzati o altri messaggi simili, che verranno archiviati nel buffer DbgPrint anziché essere inviati al debugger del kernel.
Se un'eccezione o un evento causa l'interruzione della destinazione nel debugger del kernel, il debug completo del kernel verrà attivato automaticamente, come se fosse stato eseguito kdbgctrl -e.
Il debug automatico del kernel è disabilitato per impostazione predefinita (anche se questo è irrilevante a meno che il debug completo del kernel non sia disabilitato). Per controllare il valore dell'impostazione corrente, usare kdbgctrl -ca. Per disabilitare questa impostazione, usare kdbgctrl -da. Per abilitare questa impostazione, usare kdbgctrl -ea.
Gestione degli errori in modalità utente
Quando la gestione degli errori in modalità utente è abilitata, alcuni eventi in modalità utente causano l'interruzione del computer di destinazione nel debugger del kernel.
In particolare, tutti gli interrupt int 3 , ad esempio i punti di interruzione inseriti nel codice da un debugger o le chiamate a DbgBreakPoint , causeranno un'interruzione nel debugger del kernel. Tuttavia, le eccezioni standard, ad esempio violazioni di accesso e divisione per zero, in genere non verranno inviate al debugger del kernel.
Se un debugger in modalità utente è già collegato al processo, questo debugger acquisirà tutti gli errori in modalità utente e il debugger del kernel non verrà modificato. Per la classificazione della precedenza dei vari gestori degli errori in modalità utente, vedere Abilitazione del debug postmortem.
Per il funzionamento della gestione degli errori in modalità utente, è necessario abilitare anche il debug completo del kernel o il debug automatico del kernel.
La gestione degli errori in modalità utente è abilitata per impostazione predefinita. Per controllare il valore dell'impostazione corrente, usare kdbgctrl -cu. Per disabilitare questa impostazione, usare kdbgctrl -du. Per abilitare questa impostazione, usare kdbgctrl -eu.
Blocco del debug del kernel
In alcuni casi potrebbe essere necessario configurare il computer di destinazione per il debug del kernel, ma attendere l'abilitazione del debug del kernel fino all'avvio del computer di destinazione. È possibile farlo bloccando il debug del kernel.
Importante
Prima di usare BCDEdit per modificare le informazioni di avvio, potrebbe essere necessario sospendere temporaneamente le funzionalità di sicurezza di Windows, ad esempio BitLocker e Avvio protetto nel PC di test. Riabilitare queste funzionalità di sicurezza al termine del test e gestire in modo appropriato il PC di test, quando le funzionalità di sicurezza sono disabilitate.
Per bloccare il debug del kernel, configurare il computer di destinazione usando comandi simili ai seguenti:
bcdedit /debug on
bcdedit /dbgsettings 1394 channel:32 /start DISABLE /noumex
Quando si riavvia il computer di destinazione, verrà preparato per il debug del kernel, ma il debug del kernel e la gestione degli errori in modalità utente verranno disabilitati. A questo punto, un computer host non sarà in grado di collegarsi al computer di destinazione, i controlli dei bug non verranno rilevati dal debugger del kernel e le eccezioni in modalità utente non causeranno un'interruzione nel debugger del kernel.
Quando si è pronti, è possibile abilitare il debug del kernel (senza riavviare il computer di destinazione) immettendo i comandi seguenti.
kdbgctrl -db
kdbgctrl -e
In seguito, è possibile disabilitare il debug del kernel immettendo i comandi seguenti.
kdbgctrl -d
kdbgctrl -eb
È possibile usare kdbgctrl -cb per verificare se il debug del kernel è bloccato.
Dimensioni del buffer DbgPrint
Il buffer DbgPrint archivia i messaggi inviati dal computer di destinazione al debugger del kernel.
Se il debug completo del kernel è abilitato, questi messaggi verranno visualizzati automaticamente nel debugger del kernel. Tuttavia, se questa opzione è disabilitata, questi messaggi verranno archiviati nel buffer. In un secondo momento, è possibile abilitare il debug del kernel, connettersi a un debugger del kernel e usare l'estensione !dbgprint per visualizzare il contenuto di questo buffer. Per altre informazioni su questo buffer, vedere Buffer DbgPrint.
Le dimensioni predefinite del buffer DbgPrint sono di 4 KB in una build gratuita di Windows. Per determinare le dimensioni correnti del buffer, usare kdbgctrl -cdb. Per modificare le dimensioni del buffer, usare kdbgctrl -sdbSize, dove Size specifica le nuove dimensioni del buffer. Per informazioni dettagliate sulla sintassi, vedere Opzioni della riga di comando KDbgCtrl.
Esempi:
Per visualizzare tutte le impostazioni correnti, usare il comando seguente:
kdbgctrl -c -ca -cu -cb -cdb
Per ripristinare le impostazioni predefinite, usare il comando seguente:
kdbgctrl -e -da -eu -db -sdb 0x1000
Per bloccare il computer host in modo che venga contattato solo in caso di eccezioni, usare il comando seguente:
kdbgctrl -d -ea -eu
Per disabilitare tutto il debug del kernel, usare il comando seguente:
kdbgctrl -d -da
Se si disabilita tutto il debug del kernel, è anche possibile aumentare le dimensioni del buffer DbgPrint. In questo modo si garantisce che tutti i messaggi verranno salvati nel caso in cui sia necessario visualizzarli in un secondo momento. Se si dispone di un megabyte di memoria da risparmiare, è possibile usare il comando seguente:
kdbgctrl -sdb 0x100000