Introduzione al debug di Windows

Questo articolo illustra come iniziare a eseguire il debug per Windows. Se l'obiettivo è usare il debugger per analizzare un dump di arresto anomalo del sistema, vedere Analizzare i file di dump di arresto anomalo del sistema tramite WinDbg.

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

1. 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 viene eseguito nel sistema host e il codice di cui si vuole eseguire il debug nel sistema di destinazione .

Destinazione host <-------------------------------------------------->

Diagram illustrating the connection between host and target systems with a double arrow.

In alcune situazioni, è possibile usare una macchina virtuale come secondo sistema. Ad esempio, un PC virtuale potrebbe essere eseguito nello stesso PC del codice di cui è necessario eseguire il debug. Tuttavia, se il codice comunica con hardware di basso livello, l'uso di un PC virtuale potrebbe non essere l'approccio migliore. Per altre informazioni, vedere Configurazione del debug di rete di una macchina virtuale - KDNET.

2. 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 eseguono questa operazione all'interno dei propri spazi 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 UMDF (User-Mode Driver Framework) 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:

3. 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 Debug degli ambienti.

4. Determinare come connettere la destinazione e l'host

In genere, i sistemi di destinazione e host sono connessi da una rete Ethernet. Se si sta eseguendo operazioni iniziali o non si dispone di una connessione Ethernet in un dispositivo, sono disponibili altre opzioni di connessione di rete. Vedi questi articoli per ulteriori informazioni:

5. 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 bit o a 64 bit.

6. 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 per il debug di Windows.

7. 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.

8. Acquisire familiarità con l'operazione del debugger

La sezione Relativa all'operazione debugger di questa documentazione descrive l'operazione del debugger per varie attività. Ad esempio, il caricamento delle DLL dell'estensione del debugger illustra come caricare le estensioni del debugger.

9. Acquisire familiarità con le tecniche di debug

Le tecniche di debug standard si applicano alla maggior parte degli scenari di debug ed esempi includono l'impostazione di punti di interruzione, l'ispezione dello stack di chiamate e la ricerca di una perdita di memoria. Le tecniche di debug specializzate si applicano a particolari tecnologie o tipi di codice. Ad esempio, il debug plug and play, il debug KMDF e il debug RPC.

10. 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 sul debugger.

11. 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.

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 Internals di Windows di Paolo Yosifovich, Mark E. Russinovich, David A. Solomon e Alex Ionovich.

13. Esaminare le risorse di debug aggiuntive

Altre risorse includono i libri e i video seguenti:

  • Debug di Windows: strategie pratiche di debug e traccia di Tarik Soulami
  • Debug avanzato di Windows di Mario Hewardt e Daniel Pravat
  • Serie video defrag Tools, episodi da 13 a 29, tutto su WinDbg

Vedi anche