File di dump in modalità utente

In questo articolo ottenere una panoramica dei file di dump in modalità utente e come usarli per risolvere i bug e gli arresti anomali.

Per informazioni sull'analisi di un file di dump, vedere Analizzare un file di dump in modalità utente.

Tipi di file di dump in modalità utente

Sono disponibili diversi tipi di file di dump in modalità utente. I diversi tipi di file di dump sono suddivisi in due categorie:

È possibile ottenere una notevole quantità di informazioni analizzando un file di dump. Tuttavia, nessun file di dump può fornire la quantità di informazioni ottenute dal debug dell'arresto anomalo usando un debugger.

Dump in modalità utente completa

Un dump in modalità utente completo è il file di dump in modalità utente di base. Un file di dump in modalità utente completo include:

  • L'intero spazio di memoria di un processo.
  • Immagine eseguibile del programma.
  • Tabella handle.
  • Altre informazioni che consentono al debugger di ricostruire la memoria in uso quando si è verificato il dump.

È possibile compattare un file di dump in modalità utente completo in un minidump. Per compattare un file di dump in modalità utente completo, caricare innanzitutto il file dump nel debugger. Usare quindi il comando dump (Crea file di dump) per salvare un nuovo file dump in formato minidump.

Nonostante i nomi, il file minidump più grande contiene più informazioni rispetto al file di dump in modalità utente completo. Ad esempio, i .dump /mf comandi e .dump /ma creano file più grandi e più completi del .dump /f comando.

In modalità utente [.dump /mMiniOptions] è spesso la scelta migliore. I file di dump creati usando questo commutatore possono variare in dimensioni diverse da dimensioni molto piccole a molto grandi. Specificando l'opzione MiniOptions corretta, è possibile controllare esattamente le informazioni incluse.

Minidumps

Le dimensioni e il contenuto di un file minidump variano a seconda del programma in fase di dump e dell'applicazione che esegue il dump e le opzioni selezionate. A volte, un file minidump è moderatamente grande e include la memoria completa e la tabella di handle. Altre volte, il file minidump è molto più piccolo. Ad esempio, un file minidump può contenere solo informazioni su un singolo thread oppure può contenere solo informazioni sui moduli a cui si fa riferimento nello stack.

Il termine minidump è fuorviante perché i file minidump più grandi contengono più informazioni di un file di dump in modalità utente completo. Ad esempio, .dump /mf o .dump /ma crea un file più grande e più completo di .dump /f. Per questo motivo, è consigliabile usare .dump /m[MiniOptions] anziché .dump /f creare tutti i file di dump in modalità utente.

Se si crea un file minidump usando il debugger, è possibile scegliere quali informazioni includere. Il .dump /m comando include informazioni di base sui moduli caricati che costituiscono il processo di destinazione, le informazioni sul thread e le informazioni sullo stack. È possibile modificare il comando di base usando una delle opzioni di opzione descritte nella tabella seguente:

Opzione .dump Effetto sul file di dump
/ma Crea un minidump con tutte le aggiunte facoltative. L'opzione /ma equivale a /mfFhut. Aggiunge dati di memoria completi, gestire dati, informazioni sul modulo non caricate, informazioni sulla memoria di base e informazioni sul tempo di thread al minidump.
/mf Aggiunge i dati di memoria completi al minidump. Tutte le pagine commit accessibili di proprietà dell'applicazione di destinazione sono incluse.
/mF Aggiunge tutte le informazioni di base sulla memoria al minidump. Questo commutatore aggiunge un flusso al minidump che contiene tutte le informazioni di base sulla memoria, non solo sulle informazioni sulla memoria valida. Il debugger usa le informazioni per ricostruire il layout completo della memoria virtuale del processo quando viene eseguito il debug del minidump.
/mh Aggiunge i dati sugli handle associati all'applicazione di destinazione al minidump.
/mu Aggiunge informazioni sul modulo non caricate al minidump. Questa opzione è disponibile solo in Windows Server 2003 e versioni successive di Windows.
/mt Aggiunge altre informazioni sul thread al minidump. Le informazioni sul thread includono i tempi di thread, che possono essere visualizzati usando .ttime (Display Thread Times) quando si esegue il debug del minidump.
/mi Aggiunge memoria secondaria al minidump. La memoria secondaria è qualsiasi memoria a cui fa riferimento un puntatore nello stack o nell'archivio di backup, oltre a un'area ridotta che circonda questo indirizzo.
/mp Aggiunge i dati del blocco dell'ambiente di elaborazione e del blocco di thread al minidump. Queste informazioni possono essere utili se è necessario accedere alle informazioni di sistema di Windows relative ai processi e ai thread dell'applicazione.
/mw Aggiunge tutte le pagine private di lettura in scrittura di commit al minidump.
/md Aggiunge tutti i segmenti di dati di lettura-scrittura all'interno dell'immagine eseguibile al minidump.
/mc Aggiunge sezioni di codice all'interno delle immagini.
/mr Elimina dalle parti minidump dello stack e archivia memoria che non vengono usate per ricreare la traccia dello stack. Le variabili locali e altri valori del tipo di dati vengono eliminati. Questa opzione non rende il minidump più piccolo (le sezioni di memoria inutilizzate sono zero), ma è utile se si vuole proteggere la privacy di altre applicazioni.
/mR Elimina i percorsi completi del modulo dal minidump. Sono inclusi solo i nomi dei moduli. Questa opzione è utile se si vuole proteggere la privacy della struttura di directory dell'utente.

È possibile combinare queste opzioni di opzione. Ad esempio, usare il comando .dump /mfiu per creare un minidump di dimensioni moderatamente grandi che contiene memoria scaricata e secondaria. Usare il comando .dump /mrR per creare un minidump che rimuove alcune delle informazioni dell'utente. Per informazioni dettagliate sulla sintassi completa, vedere .dump (Create Dump File).

Strumenti da usare per creare un file dump

Esistono diversi strumenti che è possibile usare per creare un file di dump in modalità utente:

  • ProcDump
  • CDB
  • WinDbg

ProcDump

ProcDump è un'utilità della riga di comando che è possibile usare per monitorare un'applicazione per picchi di CPU e generare dump di arresto anomalo durante un picco. Un amministratore o uno sviluppatore può usare i file di dump di arresto anomalo per determinare la causa del picco. ProcDump include anche il monitoraggio per le finestre bloccate (usando la stessa definizione di un blocco di finestra usato da Windows e Task Manager) e le eccezioni non gestite. È possibile usare ProcDump per generare dump in base ai valori dei contatori delle prestazioni del sistema. ProcDump può anche fungere da utilità di dump del processo generale che è possibile incorporare in altri script.

Per informazioni sulla creazione di un file di dump in modalità utente tramite l'utilità Sysinternals ProcDump, vedere ProcDump.

CDB e WinDbg

Debugger console (CDB) e Windows Debugger (WinDbg) sono strumenti di debug inclusi in Windows Software Development Kit e Windows Driver Kit. Vedere le opzioni di installazione in Scaricare e installare il debugger windows WinDbg.

È possibile usare CDB o WinDbg per creare file di dump in modalità utente in più modi:

  • Creare automaticamente un file dump.
  • Creare file di dump quando si esegue il debug.
  • Compattare un file di dump esistente.

Per altre informazioni sugli strumenti, vedere Introduzione con Debug e debug di Windows tramite CDB.

Creare automaticamente un file dump

Quando si verifica un errore dell'applicazione, Windows potrebbe rispondere in uno dei diversi modi, a seconda delle impostazioni di debug postmortem. Se queste impostazioni indicano a uno strumento di debug di creare un file di dump, viene creato un file di dump della memoria in modalità utente. Per altre informazioni, vedere Abilitare il debug postmortem.

Creare file di dump quando si esegue il debug

Quando CDB o WinDbg esegue il debug di un'applicazione in modalità utente, è anche possibile usare il comando . dump (Create Dump File) per creare un file dump.

Questo comando non causa l'interruzione dell'applicazione di destinazione. Selezionando opzioni di comando specifiche, è possibile creare un file minidump che contiene esattamente la quantità di informazioni desiderate.

Compattare un file dump esistente

È possibile usare CDB o WinDbg per compattare un file di dump. Per compattare un file dump, iniziare a eseguire il debug di un file di dump esistente. Usare quindi il .dump comando per creare un file dump di dimensioni inferiori.

Debug di viaggi temporali

Un'altra opzione per eseguire il debug delle applicazioni in modalità utente è Il debug di viaggi temporali (TTD). TTD è uno strumento che è possibile usare per registrare il processo durante l'esecuzione. È possibile riprodurre la registrazione della sessione del debugger per trovare il bug. È possibile passare facilmente a diverse parti della registrazione per comprendere le condizioni che hanno portato al bug e come risolvere il problema.

TTD offre vantaggi significativi sui file di dump di arresto anomalo, che spesso mancano all'esecuzione del codice che ha causato l'errore. La possibilità di spostarsi indietro nell'esecuzione del codice può essere utile per determinare la causa radice.

Per altre informazioni, vedere panoramica del debug di time travel.

Passaggi successivi