File di dump in modalità utente

In questo articolo viene fornita 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 di arresto anomalo della 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 tramite un debugger.

Dump in modalità utente completi

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

  • 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 prima di tutto il file di dump nel debugger. Usare quindi il comando dump (Crea file dump) per salvare un nuovo file di 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 di dimensioni maggiori e più complete rispetto al .dump /f comando .

In modalità utente[ .dump /mMiniOptions] è spesso la scelta migliore. I file di dump creati usando questa opzione possono variare in dimensioni da 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. In alcuni casi, un file minidump è moderatamente grande e include la memoria completa e la tabella handle. In altri casi, 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 viene fatto riferimento nello stack.

Il termine minidump è fuorviante perché i file minidump più grandi contengono più informazioni rispetto a 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] invece di .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:

.dump opzione 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 i dati, le informazioni sul modulo scaricato, le informazioni di base sulla memoria e le informazioni sul tempo di thread al minidump.
/mf Aggiunge dati di memoria completi al minidump. Sono incluse tutte le pagine di cui è stato eseguito il commit accessibile di proprietà dell'applicazione di destinazione.
/mF Aggiunge tutte le informazioni di base sulla memoria al minidump. Questa opzione aggiunge un flusso al minidump che contiene tutte le informazioni di base sulla memoria, non solo 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 dati sugli handle associati all'applicazione di destinazione al minidump.
/mu Aggiunge informazioni sul modulo scaricato 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 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 una piccola area che circonda questo indirizzo.
/mp Aggiunge i dati del blocco dell'ambiente del processo e dell'ambiente 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/scrittura di cui è stato eseguito il 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 le parti minidump dello stack e archivia la memoria che non vengono usate per ricreare l'analisi dello stack. Vengono eliminate anche variabili locali e altri valori del tipo di dati. 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 moderate che contiene memoria scaricata e secondaria. Usare il comando .dump /mrR per creare un minidump che rimuove alcune informazioni dell'utente. Per informazioni dettagliate sulla sintassi, vedere .dump (Create Dump File).

Strumenti da usare per creare un file di dump

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

ProcDump

ProcDump è un'utilità della riga di comando che è possibile usare per monitorare un'applicazione per i 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 del sistema per determinare la causa del picco. ProcDump include anche il monitoraggio delle finestre bloccate (usando la stessa definizione di un blocco di finestra usato da Windows e Gestione attività) e le eccezioni non gestite. È possibile usare ProcDump per generare dump in base ai valori dei contatori delle prestazioni di sistema. ProcDump può anche fungere da utilità di dump di 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.

WinDbg e CDB

Il debugger della console (CDB) e il debugger Windows (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 diversi modi:

  • Creare automaticamente un file di dump.
  • Creare file di dump durante il debug.
  • Compattare un file di dump esistente.

Per altre informazioni sugli strumenti, vedere Getting Started with Windows Debugging and Debug by using CDB .For more information about the tools, see Getting Started with Windows Debugging and Debug by using CDB.

Creare automaticamente un file di dump

Quando si verifica un errore dell'applicazione, Windows potrebbe rispondere in 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 durante il debug

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

Questo comando non causa l'interruzione dell'applicazione di destinazione. Selezionando opzioni di comando specifiche, è possibile creare un file minidump contenente 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 di 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 del tempo di viaggio

Un'altra opzione per eseguire il debug di applicazioni in modalità utente è Il debug del tempo di viaggio (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 presenta vantaggi significativi rispetto ai file di dump di arresto anomalo del sistema, che spesso mancano all'esecuzione del codice che ha causato l'errore. La possibilità di spostarsi all'indietro nell'esecuzione del codice può essere utile per determinare la causa radice.

Per altre informazioni, vedere la panoramica del debug di viaggi temporali.

Vedi anche