Condividi tramite


Impostare il debugging Kernel-Mode di una macchina virtuale manualmente utilizzando una porta COM virtuale

Gli strumenti di debug per Windows supportano il debug del kernel di una macchina virtuale. La macchina virtuale può trovarsi nello stesso computer fisico del debugger o in un computer diverso connesso alla stessa rete. Questo argomento descrive come configurare manualmente il debug di una macchina virtuale usando una porta COM virtuale tramite KDCOM.

L'uso della rete virtuale KDNET è un'opzione più veloce ed è consigliata. Per altre informazioni, vedere Configurazione del debug di rete di una macchina virtuale con KDNET.

Configurazione della macchina virtuale di destinazione

Il computer che esegue il debugger è denominato computer host e la macchina virtuale sottoposta a debug viene chiamata macchina virtuale di destinazione .

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.

  1. Nella macchina virtuale, aprire una finestra del prompt dei comandi con privilegi elevati e immettere i comandi seguenti.

    bcdedit /debug in

    bcdedit /dbgsettings serial debugport:nbaudrate:115200

    dove n è il numero di una porta COM nella macchina virtuale.

  2. Nella macchina virtuale, configurare la porta COM per eseguire il mapping a una named pipe ('pipe nominata'). La connessione del debugger avverrà tramite questa pipe. Per ulteriori informazioni su come creare questa pipeline, consultare la documentazione della macchina virtuale.

  3. Avviare il debugger in modalità con privilegi elevati, ad esempio da un prompt dei comandi dell'amministratore. Il debugger deve essere in esecuzione in modalità con privilegi elevati durante il debug di una macchina virtuale su una pipe seriale. Dopo aver collegato ed eseguito il debugger, riavviare la macchina virtuale di destinazione.

Avvio della sessione di debug tramite WinDbg

Sul computer host, apri WinDbg come Amministratore. Il debugger deve essere in esecuzione in modalità con privilegi elevati durante il debug di una macchina virtuale su una pipe seriale. Nel menu File, scegliere Debug kernel. Nella finestra di dialogo Debug del kernel aprire la scheda COM . Selezionare la casella pipe e selezionare la casella Riconnetti. Per Baud Rate, digitare 115200. Per Resettare, immettere 0.

Se il debugger è in esecuzione nello stesso computer della macchina virtuale, immettere quanto segue per Porta.

\\.\pipe\PipeName.

Se il debugger è in esecuzione in un computer diverso dalla macchina virtuale, immettere quanto segue per Porta.

\\ VMHost\pipe\pipeName

Selezionare OK.

È anche possibile avviare WinDbg dalla riga di comando. Se il debugger è in esecuzione nello stesso computer fisico della macchina virtuale, immettere il comando seguente in una finestra del Prompt dei Comandi.

windbg -k com:pipe,port=\.\pipe\PipeName,resets=0,reconnect

Se il debugger è in esecuzione in un computer fisico diverso dalla macchina virtuale, immettere il comando seguente in una finestra del prompt dei comandi.

windbg -k com:pipe,port=\\VMHost\pipe\PipeName,resets=0,reconnect

Avvio della sessione di debug tramite KD

Per eseguire il debug di una macchina virtuale in esecuzione nello stesso computer fisico del debugger, immettere il comando seguente in un finestra del prompt dei comandi con privilegi elevati.

kd -k com:pipe,port=\\.\pipe\PipeName,resets=0,reconnect

Per eseguire il debug di una macchina virtuale in esecuzione in un computer fisico diverso dal debugger, immettere il comando seguente in una finestra del prompt dei comandi.

kd -k com:pipe,port=\\VMHost\pipe\PipeName,resets=0,riconnessione

Parametri

VMHost
Specifica il nome del computer in cui è in esecuzione la macchina virtuale.

pipename
Specifica il nome della pipe che hai creata nella macchina virtuale.

resets=0
Specifica che un numero illimitato di pacchetti di reimpostazione può essere inviato alla destinazione quando l'host e la destinazione vengono sincronizzati. Usare il parametro resets=0 per Microsoft Virtual PC e altre macchine virtuali le cui pipe rilasciano byte in eccesso. Non usare questo parametro per VMware o altre macchine virtuali le cui pipe non rilasciano tutti i byte in eccesso.

riconnettere
Porta alla disconnessione automatica del debugger e alla riconnessione della pipe in caso di un errore di lettura/scrittura. Inoltre, se il debugger non trova una pipe denominata all'avvio, il parametro riconnettere fa sì che il debugger attenda l'apparizione di una pipe chiamata PipeName. Usare riconnettersi per il PC virtuale e altre macchine virtuali che eliminano e ricreano le pipe durante il riavvio del computer. Non usare questo parametro per VMware o altre macchine virtuali che mantengono le pipe durante il riavvio del computer.

Per ulteriori informazioni sulle ulteriori opzioni della riga di comando, vedere Opzioni Command-Line KD o Opzioni Command-Line WinDbg.

Macchine virtuali di seconda generazione

Per impostazione predefinita, le porte COM non vengono presentate nelle macchine virtuali di seconda generazione. È possibile aggiungere porte COM tramite PowerShell o WMI. Affinché le porte COM vengano visualizzate nella console di Hyper-V Manager, devono essere create con un percorso.

Per abilitare il debug del kernel usando una porta COM in una macchina virtuale di seconda generazione, seguire questa procedura:

  1. Disabilitare l'avvio protetto immettendo questo comando di PowerShell:

    Set-VMFirmware –VmnameVmName–EnableSecureBoot Off

    dove VmName è il nome della macchina virtuale.

  2. Aggiungere una porta COM alla macchina virtuale immettendo questo comando di PowerShell:

    Set-VMComPort –VMNameVmName1 \\.\pipe\PipeName

    Ad esempio, il comando seguente configura la prima porta COM nella macchina virtuale TestVM per connettersi alla named pipe TestPipe nel computer locale.

    Set-VMComPort –VMName TestVM 1 \\.\pipe\TestPipe

  3. Dopo che il debugger è collegato e in esecuzione, arrestare e avviare a freddo la macchina virtuale per attivare le porte COM nella macchina virtuale. Gli UART emulati non sono disponibili per il debug, a meno che almeno uno non sia effettivamente configurato con un nome di pipe e non possano essere inseriti a caldo.

  4. Riabilitare l'avvio protetto dopo aver completato l'aggiornamento delle modifiche alla configurazione.

Per altre informazioni sulle macchine virtuali di seconda generazione, vedere Panoramica delle macchine virtuali di seconda generazione .

Osservazioni

Se il computer di destinazione ha smesso di rispondere, è ancora arrestato a causa di un'azione di debug del kernel precedente, o si è usata l'opzione della riga di comando -b, il debugger entra immediatamente nel computer di destinazione.

In caso contrario, il computer di destinazione continua l'esecuzione fino a quando il debugger non ne ordina l'interruzione.

Risoluzione dei problemi relativi a firewall e accesso alla rete

Il debugger (WinDbg o KD) deve avere accesso tramite il firewall. Questo può anche essere valido per le porte seriali virtuali supportate dalle schede di rete.

Se viene richiesto a Windows di disattivare il firewall quando viene caricato il debugger, selezionare tutte e tre le caselle.

A seconda delle specifiche della macchina virtuale in uso, potrebbe essere necessario modificare le impostazioni di rete per le macchine virtuali per collegarle in bridge alla scheda di debug di rete del kernel Microsoft. In caso contrario, le macchine virtuali non avranno accesso alla rete.

Firewall di Windows

È possibile usare il Pannello di controllo per consentire l'accesso tramite Windows Firewall. Aprire pannello di controllo > Sistema e sicurezza e selezionare Consenti un'app tramite Windows Firewall. Nell'elenco delle applicazioni, individuare Debugger Simbolico dell'Interfaccia Utente Grafica Windows e Debugger del Kernel Windows. Usare le caselle di controllo per consentire queste due applicazioni tramite il firewall. Riavviare l'applicazione di debug (WinDbg o KD).

Macchine virtuali di terze parti

VMWare

Se si riavvia la macchina virtuale usando le funzionalità VMWare (ad esempio, il pulsante di reimpostazione), uscire da WinDbg e quindi riavviare WinDbg per continuare il debug. Durante il debug delle macchine virtuali, VMWare usa spesso 100% della CPU.

Vedere anche

Configurazione del debugging di rete di una macchina virtuale con KDNET

Configurazione manuale del debugging Kernel-Mode

Configurazione del debug di rete di un host macchina virtuale