Share via


Configurazione di Kernel-Mode debug di una macchina virtuale manualmente tramite una porta COM virtuale

Strumenti di debug per Windows supporta 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 è consigliabile. 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 viene chiamato 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 immettere i comandi seguenti in una finestra del prompt dei comandi con privilegi elevati.

    bcdedit /debug on

    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. Il debugger si connetterà tramite questa pipe. Per altre informazioni su come creare questa pipe, vedere 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 tramite una pipe seriale. Dopo aver collegato ed eseguito il debugger, riavviare la macchina virtuale di destinazione.

Avvio della sessione di debug tramite WinDbg

Nel computer host aprire WinDbg come amministratore. Il debugger deve essere in esecuzione in modalità con privilegi elevati durante il debug di una macchina virtuale tramite una pipe seriale. Scegliere Debug kernel dal menu File. Nella finestra di dialogo Debug kernel aprire la scheda COM . Selezionare la casella Pipe e selezionare la casella Riconnetti . In Baud Rate (Tasso baud) immettere 115200. Per Reimpostazioni 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 una 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,reconnect

Parametri

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

PipeName
Specifica il nome della pipe 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 eliminano byte in eccesso. Non usare questo parametro per VMware o altre macchine virtuali le cui pipe non rilasciano tutti i byte in eccesso.

Ricollegare
Causa la disconnessione automatica del debugger e la riconnessione della pipe se si verifica un errore di lettura/scrittura. Inoltre, se il debugger non trova la named pipe all'avvio del debugger, il parametro di riconnessione fa sì che il debugger attenda la visualizzazione di una pipe denominata PipeName . Usare la riconnessione per 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 altre informazioni sulle opzioni della riga di comando aggiuntive, vedere Opzioni Command-Line KD o Opzioni di Command-Line WinDbg.

Macchine virtuali di generazione 2

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 gestione di Hyper-V, 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 –Vmname VmName–EnableSecureBoot off

    dove VmName è il nome della macchina virtuale.

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

    Set-VMComPort –VMName VmName1 \\.\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 aver collegato ed eseguito il debugger, arrestare e avviare a freddo la macchina virtuale per attivare le porte COM nella macchina virtuale. L'UARTS emulato non è disponibile per il debug, a meno che almeno uno non sia effettivamente configurato con un nome di pipe e non possa essere aggiunto 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, il computer di destinazione viene ancora arrestato a causa di un'azione di debug del kernel precedente oppure è stata usata l'opzione della riga di comando -b, il debugger si interrompe immediatamente nel computer di destinazione.

In caso contrario, il computer di destinazione continua l'esecuzione fino a quando il debugger 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 il caso per le porte seriali virtuali supportate dalle schede di rete.

Se viene richiesto da 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 il bridge alla scheda di debug di rete del kernel Microsoft. In caso contrario, le macchine virtuali non avranno accesso alla rete.

Windows Firewall

È possibile usare 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 di Windows e debugger del kernel Windows. Usare le caselle di controllo per consentire a 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 spesso utilizza il 100% della CPU.

Vedere anche

Configurazione del debug di rete di una macchina virtuale con KDNET

Configurazione manuale del debug Kernel-Mode

Configurazione del debug di rete di un host macchina virtuale