Condividi tramite


Introduzione al debug di Windows

Questo articolo illustra come iniziare a eseguire il debug per Windows. Se l'obiettivo è utilizzare il debugger per analizzare un crash dump, vedere Analizzare i file di crash dump usando WinDbg.

Per iniziare a eseguire il debug di Windows, completare la procedura seguente.

1. Installare il debugger di Windows

Per informazioni sull'installazione di WinDbg, vedere Installare WinDbg.

2. Identificare i sistemi host e di destinazione

Due sistemi computer separati vengono in genere usati per il debug perché l'esecuzione delle istruzioni sul processore viene in genere sospesa durante il processo. Il debugger gira sul sistema host e il codice che si vuole eseguire il debug gira sul sistema di destinazione.

host <--------------------------------------------------> destinazione

Diagramma che illustra la connessione tra sistemi host e di destinazione con una doppia freccia.

In alcune situazioni, è possibile usare una macchina virtuale come secondo sistema. Ad esempio, un PC virtuale potrebbe essere eseguito sullo stesso PC in cui il codice deve essere sottoposto a debug. Tuttavia, se il codice comunica con hardware di basso livello, l'uso di un PC virtuale potrebbe non essere l'approccio migliore. Per ulteriori informazioni, vedi Configurazione del debug di rete di una macchina virtuale - KDNET.

3. Determinare il tipo di debugger: modalità kernel o modalità utente

Successivamente, è necessario determinare se usare il debug in modalità kernel o in modalità utente.

  • Il sistema operativo e i programmi con privilegi vengono eseguiti in modalità kernel . Il codice in modalità kernel ha l'autorizzazione per accedere a qualsiasi parte del sistema e non è limitato come il codice in modalità utente. Il codice in modalità kernel può accedere a qualsiasi parte di qualsiasi altro processo in esecuzione in modalità utente o kernel. Gran parte delle funzionalità principali del sistema operativo e molti driver di dispositivo hardware vengono eseguiti in modalità kernel.

  • Le applicazioni e i sottosistemi nel computer vengono eseguiti in modalità utente . I processi eseguiti in modalità utente operano all'interno dei propri spazi di indirizzi virtuali. Sono limitati a ottenere l'accesso diretto a molte parti del sistema, tra cui hardware di sistema, memoria non allocata per il loro uso e altre parti del sistema che potrebbero compromettere l'integrità del sistema. I processi eseguiti in modalità utente sono effettivamente isolati dal sistema e da altri processi in modalità utente, in modo che non possano interferire con queste risorse.

Se l'obiettivo è eseguire il debug di un driver, determinare se il driver è un driver in modalità kernel o un driver in modalità utente. I driver di Windows Driver Model (WDM) e Kernel-Mode Driver Framework (KMDF) sono entrambi driver in modalità kernel. Come suggerisce il nome, i driver del User-Mode Driver Framework (UMDF) sono driver in modalità utente.

Per alcuni problemi, può essere difficile determinare in quale modalità viene eseguito il codice. In tal caso, potrebbe essere necessario selezionare una modalità e visualizzare le informazioni disponibili in tale modalità. Alcuni problemi richiedono l'uso del debugger sia in modalità utente che in modalità kernel.

A seconda della modalità in cui si esegue il debug, potrebbe essere necessario configurare e usare i debugger in modi diversi. Alcuni comandi di debug funzionano allo stesso modo in entrambe le modalità e alcuni comandi funzionano in modo diverso.

Altre informazioni sull'uso del debugger in modalità kernel:

Altre informazioni sull'uso del debugger in modalità utente:

4. Scegliere l'ambiente del debugger

Il debugger WinDbg funziona correttamente nella maggior parte delle situazioni, ma in alcuni casi potrebbe essere necessario usare un altro debugger, ad esempio debugger della console per l'automazione o Visual Studio. Per altre informazioni, vedere Ambienti di debug.

5. Determinare come connettere l'obiettivo e l'host

In genere, i sistemi di destinazione e host sono connessi da una rete Ethernet. Se si stanno eseguendo i primi lavori di avviamento o se non si dispone di una connessione Ethernet su un dispositivo, sono disponibili altre opzioni di connessione di rete. Per altre informazioni, vedere questi articoli:

6. Scegliere strumenti di debug a 32 bit o a 64 bit

Se è necessario un debugger a 32 bit o a 64 bit, dipende dalla versione di Windows eseguita nei sistemi host e di destinazione e dal debug di codice a 32 bit o a 64 bit. Per altre informazioni, vedere Scelta di strumenti di debug a 32 o a 64 bit.

7. Configurare i simboli

Per usare tutte le funzionalità avanzate fornite da WinDbg, è necessario caricare i simboli appropriati. Se i simboli non sono configurati correttamente, si riceveranno messaggi che indicano che i simboli non sono disponibili quando si tenta di usare la funzionalità dipendente dai simboli. Per altre informazioni, vedere Simboli di per il debug di Windows.

8. Configurare il codice sorgente

Se l'obiettivo è eseguire il debug di codice sorgente personalizzato, è necessario configurare un percorso per il codice sorgente. Per altre informazioni, vedere Percorso di origine.

9. Acquisire familiarità con l'operazione del debugger

La sezione dell'operazione del debugger di questa documentazione descrive l'operazione del debugger per varie attività. Ad esempio, Mantenere un file di log in WinDbg descrive come WinDbg può scrivere un file di log che registra la sessione di debug.

10. Acquisire familiarità con le tecniche di debug

Tecniche di debug standard si applicano alla maggior parte degli scenari di debug ed esempi includono l'impostazione delle interruzioni, l'ispezione dello stack di chiamate e l'individuazione di perdite di memoria. Tecniche di debug specializzate si applicano a specifiche tecnologie o tipi di codice. Ad esempio, il debug Plug and Play, il debug del KMDF e il debug dell'RPC.

11. Usare i comandi di riferimento del debugger

È possibile usare diversi comandi di debug mentre si lavora nel debugger. Usare il comando .hh nel debugger per visualizzare informazioni utili su qualsiasi comando di debug. Per altre informazioni sui comandi disponibili, vedere informazioni di riferimento Debugger.

12. Usare le estensioni di debug per tecnologie specifiche

Sono disponibili più estensioni di debug che possono essere usate per analizzare strutture di dati specifiche del dominio. Per altre informazioni, vedere Estensioni specializzate. Caricamento delle DLL delle estensioni del debugger spiega come caricare le estensioni del debugger.

Questa documentazione presuppone che l'utente abbia alcune conoscenze sui componenti interni di Windows principali. Per altre informazioni sugli elementi interni di Windows, tra cui l'utilizzo della memoria, il contesto, i thread e i processi, è possibile esaminare le risorse come Windows Internals di Pavel Yosifovich, Mark E. Russinovich, David A. Solomon e Alex Ionescu.

14. Esaminare le risorse di debug aggiuntive

Altre risorse includono i libri e i video seguenti:

  • All'interno di Windows Debugging: Strategie Pratiche di Debug e Tracciamento di Tarik Soulami
  • debug avanzato di Windows di Mario Hewardt e Daniel Pravat
  • Defrag Tools serie di video, episodi dal 13 al 29, incentrati su WinDbg

Vedere anche