Speicherabbilddateien im Benutzermodus

In diesem Artikel erhalten Sie eine Übersicht über Speicherabbilddateien im Benutzermodus und wie Sie sie verwenden, um Fehler und Abstürze zu beheben.

Informationen zum Analysieren einer Speicherabbilddatei finden Sie unter Analysieren einer Speicherabbilddatei im Benutzermodus.

Typen von Speicherabbilddateien im Benutzermodus

Es sind mehrere Arten von Absturzabbilddateien im Benutzermodus verfügbar. Die verschiedenen Typen von Speicherabbilddateien sind in zwei Kategorien unterteilt:

Sie können eine beträchtliche Menge an Informationen erhalten, indem Sie eine Speicherabbilddatei analysieren. Allerdings kann keine Speicherabbilddatei die Menge an Informationen angeben, die Sie beim Debuggen des Absturzes mithilfe eines Debuggers erhalten.

Vollständige Benutzermodusabbilder

Ein vollständiges Benutzermodusabbild ist die grundlegende Speicherabbilddatei für den Benutzermodus. Eine vollständige Speicherabbilddatei im Benutzermodus umfasst Folgendes:

  • Der gesamte Arbeitsspeicher eines Prozesses.
  • Das ausführbare Image des Programms.
  • Die Handletabelle.
  • Weitere Informationen, die dem Debugger helfen, den Speicher zu rekonstruieren, der beim Auftreten des Speicherabbilds verwendet wurde.

Sie können eine vollständige Speicherabbilddatei im Benutzermodus zu einem Minidump verkleinern . Um eine vollständige Speicherabbilddatei im Benutzermodus zu verkleinern, laden Sie zuerst die Speicherabbilddatei in den Debugger. Verwenden Sie dann den Befehl .dump (Create Dump File), um eine neue Speicherabbilddatei im Minidump-Format zu speichern.

Trotz ihres Namens enthält die größte Minidumpdatei mehr Informationen als die vollständige Benutzermodus-Dumpdatei. Beispielsweise erstellen die .dump /mf Befehle und .dump /ma größere und vollständigere Dateien als der .dump /f Befehl.

Im Benutzermodus .dump /mist [MiniOptions] häufig die beste Wahl. Die Speicherabbilddateien, die Sie mit diesem Schalter erstellen, können in der Größe von sehr klein bis sehr groß variieren. Durch Angeben des richtigen MiniOptions-Schalters können Sie genau steuern, welche Informationen enthalten sind.

Minidumps

Die Größe und der Inhalt einer Minidumpdatei variieren je nach Programm, das gedumpt wird, der Anwendung, die das Dumping durchführt, und den ausgewählten Optionen. Manchmal ist eine Minidumpdatei mäßig groß und enthält den vollen Arbeitsspeicher und die Handle-Tabelle. In anderen Situationen ist die Minidumpdatei viel kleiner. Beispielsweise kann eine Minidumpdatei nur Informationen zu einem einzelnen Thread enthalten, oder sie enthält nur Informationen zu Modulen, auf die im Stapel verwiesen wird.

Der Begriff minidump ist irreführend, da die größten Minidumpdateien mehr Informationen enthalten als eine vollständige Benutzermodus-Dumpdatei. Oder erstellt beispielsweise .dump /mf.dump /ma eine größere und vollständigere Datei als .dump /f. Aus diesem Grund wird empfohlen, [MiniOptions] anstelle von .dump /f zu verwenden.dump /m, um alle Abbilddateien im Benutzermodus zu erstellen.

Wenn Sie eine Minidumpdatei mithilfe des Debuggers erstellen, können Sie auswählen, welche Informationen eingeschlossen werden sollen. Der .dump /m Befehl enthält grundlegende Informationen zu den geladenen Modulen, aus denen der Zielprozess besteht, Threadinformationen und Stapelinformationen. Sie können den grundlegenden Befehl ändern, indem Sie eine der in der folgenden Tabelle beschriebenen Optionen verwenden:

.dump-Option Auswirkung auf die Speicherabbilddatei
/ma Erstellt einen Minidump mit allen optionalen Ergänzungen. Die /ma Option entspricht /mfFhut. Es fügt dem Minidump vollständige Speicherdaten, Handle-Daten, entladene Modulinformationen, grundlegende Speicherinformationen und Threadzeitinformationen hinzu.
/mf Fügt dem Minidump vollständige Speicherdaten hinzu. Alle zugänglichen committeten Seiten im Besitz der Zielanwendung sind enthalten.
/mF Fügt dem Minidump alle grundlegenden Speicherinformationen hinzu. Dieser Schalter fügt dem Minidump einen Stream hinzu, der alle grundlegenden Speicherinformationen enthält, nicht nur Informationen zum gültigen Arbeitsspeicher. Der Debugger verwendet die Informationen, um das gesamte Layout des virtuellen Speichers des Prozesses zu rekonstruieren, wenn der Minidump debuggt wird.
/mh Fügt dem Minidump Daten zu den Handles hinzu, die der Zielanwendung zugeordnet sind.
/mu Fügt dem Minidump entladene Modulinformationen hinzu. Diese Option ist nur in Windows Server 2003 und höheren Versionen von Windows verfügbar.
/mt Fügt dem Minidump weitere Threadinformationen hinzu. Die Threadinformationen umfassen Threadzeiten, die mithilfe von .ttime (Threadzeiten anzeigen) angezeigt werden können, wenn Sie den Minidump debuggen.
/mi Fügt dem Minidump sekundären Arbeitsspeicher hinzu. Sekundärer Arbeitsspeicher ist jeder Speicher, auf den ein Zeiger im Stapel oder Sicherungsspeicher verweist, sowie ein kleiner Bereich, der diese Adresse umgibt.
/mp Fügt dem Minidump Prozessumgebungsblock- und Threadumgebungsblockdaten hinzu. Diese Informationen können nützlich sein, wenn Sie Zugriff auf Windows-Systeminformationen zu den Prozessen und Threads der Anwendung benötigen.
/mw Fügt dem Minidump alle committeten privaten Seiten mit Lese-/Schreibzugriff hinzu.
/md Fügt dem Minidump alle Lese-/Schreibdatensegmente innerhalb des ausführbaren Images hinzu.
/mc Fügt Codeabschnitte in Bildern hinzu.
/mr Löscht Teile aus den Minidump-Teilen des Stapels und speichert Arbeitsspeicher, der nicht zum erneuten Erstellen der Stapelablaufverfolgung verwendet wird. Lokale Variablen und andere Datentypwerte werden ebenfalls gelöscht. Diese Option macht den Minidump nicht kleiner (die nicht verwendeten Speicherabschnitte sind null), aber sie ist nützlich, wenn Sie die Privatsphäre anderer Anwendungen schützen möchten.
/mR Löscht die vollständigen Modulpfade aus dem Minidump. Es sind nur Modulnamen enthalten. Diese Option ist nützlich, wenn Sie die Privatsphäre der Verzeichnisstruktur des Benutzers schützen möchten.

Sie können diese Switchoptionen kombinieren. Verwenden Sie beispielsweise den Befehl .dump /mfiu , um einen mäßig großen Minidump zu erstellen, der entladenen und sekundären Arbeitsspeicher enthält. Verwenden Sie den Befehl .dump /mrR , um einen Minidump zu erstellen, der einige Der Benutzerinformationen entfernt. Vollständige Syntaxdetails finden Sie unter .dump (Erstellen einer Speicherabbilddatei).

Tools zum Erstellen einer Speicherabbilddatei

Es gibt mehrere verschiedene Tools, mit denen Sie eine Speicherabbilddatei im Benutzermodus erstellen können:

  • ProcDump
  • CDB
  • WinDbg

ProcDump

ProcDump ist ein Befehlszeilenprogramm, mit dem Sie eine Anwendung auf CPU-Spitzen überwachen und Absturzabbilder während einer Spitze generieren können. Ein Administrator oder Entwickler kann die Absturzabbilddateien verwenden, um die Ursache der Spitze zu ermitteln. ProcDump umfasst auch die Überwachung für hängende Fenster (mit der gleichen Definition eines Fensters hängen, die Von Windows und Task-Manager verwendet wird) und nicht behandelten Ausnahmen. Sie können ProcDump verwenden, um Speicherabbilder basierend auf den Werten der Systemleistungsindikatoren zu generieren. ProcDump kann auch als allgemeines Prozessabbildhilfsprogramm dienen, das Sie in andere Skripts einbetten können.

Informationen zum Erstellen einer Speicherabbilddatei im Benutzermodus mithilfe des Sysinternals ProcDump-Hilfsprogramms finden Sie unter ProcDump.

CDB und WinDbg

Konsolendebugger (CDB) und Windows Debugger (WinDbg) sind Debugtools, die im Windows Software Development Kit und windows Driver Kit enthalten sind. Weitere Informationen finden Sie unter Herunterladen und Installieren des Windows-Debuggers für WinDbg.

Sie können CDB oder WinDbg verwenden, um Speicherabbilddateien im Benutzermodus auf verschiedene Arten zu erstellen:

  • Erstellen Sie automatisch eine Speicherabbilddatei.
  • Erstellen Sie Beim Debuggen Speicherabbilddateien.
  • Verkleinern sie eine vorhandene Speicherabbilddatei.

Weitere Informationen zu den Tools finden Sie unter Erste Schritte mit Windows-Debuggen und Debuggen mithilfe von CDB.

Automatisches Erstellen einer Speicherabbilddatei

Wenn ein Anwendungsfehler auftritt, kann Windows je nach den Einstellungen für das postmortale Debuggen auf eine von mehreren Arten reagieren. Wenn diese Einstellungen ein Debugtool anweisen, eine Speicherabbilddatei zu erstellen, wird eine Speicherabbilddatei im Benutzermodus erstellt. Weitere Informationen finden Sie unter Aktivieren des Postmortemdebuggens.

Erstellen von Speicherabbilddateien beim Debuggen

Wenn CDB oder WinDbg eine Anwendung im Benutzermodus debuggen, können Sie auch den Befehl .dump (Create Dump File) verwenden, um eine Speicherabbilddatei zu erstellen.

Dieser Befehl bewirkt nicht, dass die Zielanwendung beendet wird. Wenn Sie bestimmte Befehlsoptionen auswählen, können Sie eine Minidumpdatei erstellen, die genau die gewünschte Menge an Informationen enthält.

Verkleinern einer vorhandenen Speicherabbilddatei

Sie können CDB oder WinDbg verwenden, um eine Speicherabbilddatei zu verkleinern. Um eine Speicherabbilddatei zu verkleinern, beginnen Sie mit dem Debuggen einer vorhandenen Speicherabbilddatei. Verwenden Sie dann den .dump Befehl, um eine Speicherabbilddatei mit einer kleineren Größe zu erstellen.

Debuggen von Zeitreisen

Eine weitere Option zum Debuggen von Anwendungen im Benutzermodus ist time travel debugging (TTD). TTD ist ein Tool, mit dem Sie Ihren Prozess aufzeichnen können, während er ausgeführt wird. Sie können die Aufzeichnung der Debuggersitzung wiedergeben, um den Fehler zu finden. Sie können problemlos zu verschiedenen Teilen der Aufzeichnung wechseln, um die Bedingungen zu verstehen, die zu dem Fehler geführt haben, und wie Sie das Problem beheben können.

TTD hat erhebliche Vorteile gegenüber Absturzabbilddateien, denen häufig die Codeausführung fehlt, die zu dem Fehler geführt hat. Die Möglichkeit, bei der Codeausführung rückwärts zu reisen, kann nützlich sein, um die Grundursache zu ermitteln.

Weitere Informationen finden Sie in der Übersicht zum Debuggen von Zeitreisen.

Nächste Schritte