Benutzermodus Dumpdateien

In diesem Artikel erhalten Sie einen Überblick über Dumpdateien für den Benutzermodus und wie Sie sie zur Behebung von Fehlern und Abstürzen einsetzen können.

Informationen zum Analysieren einer Dumpdatei finden Sie unter AAnalysieren einer Dumpdatei im Benutzermodus.

Arten von Dumpdateien im Benutzermodus

Es gibt mehrere Arten von Absturz-Dumpdateien für den Benutzermodus. Die verschiedenen Arten von Dumpdateien werden in zwei Kategorien unterteilt:

Durch die Analyse einer Dumpdatei können Sie eine große Menge an Informationen erhalten. Keine Dumpdatei kann jedoch die Menge an Informationen liefern, die Sie bei der Fehlersuche mit einem Debugger erhalten.

Vollständige Dumps im Benutzermodus

Ein vollständiger Dump des Benutzermodus ist die grundlegende Dumpdatei für den Benutzermodus. Eine vollständige Dumpdatei für den Benutzermodus enthält:

  • Den gesamte Speicherbereich eines Prozesses.
  • Das ausführbare Abbild des Programms.
  • Die Handle-Tabelle.
  • Andere Informationen, die dem Debugger helfen, den Speicher nachzubilden, der verwendet wurde, als der Dump stattfand.

Sie können eine vollständige Dumpdatei für den Benutzermodus in einen Minidump verkleinern. Um eine vollständige Dumpdatei im Benutzermodus zu verkleinern, laden Sie die Dumpdatei zunächst in den Debugger. Verwenden Sie dann den Befehl .dump (Dump-Datei erstellen), um eine neue Dumpdatei im Minidump-Format zu speichern.

Trotz ihrer Namen enthält die größte Minidumpdatei mehr Informationen als die vollständige Dumpdatei für den Benutzermodus. Die Befehle .dump /mf und .dump /ma zum Beispiel erstellen größere und vollständigere Dateien als der Befehl .dump /f.

Im Benutzermodus ist .dump /m[MiniOptions] oft die beste Wahl. Die Größe der Dumpdateien, die Sie mit diesem Parameter erstellen, kann von sehr klein bis sehr groß variieren. Indem Sie den richtigen Parameter für die MiniOptions- angeben, können Sie genau steuern, welche Informationen enthalten sind.

Minidumps

Die Größe und der Inhalt einer Dumpdatei variieren je nach dem Programm, das gedumpt wird, der Anwendung, die das Dumping durchführt, und den gewählten Optionen. Manchmal ist eine Minidump-Datei mittelgroß und enthält den gesamten Speicher und die Handle-Tabelle. In anderen Fällen ist die Minidump-Datei viel kleiner. Eine Minidump-Datei kann zum Beispiel nur Informationen über einen einzelnen Thread enthalten oder nur Informationen über Module, auf die im Stack verwiesen wird.

Der Begriff Minidump ist irreführend, denn die größten Minidump-Dateien enthalten mehr Informationen als eine vollständige Dumpdatei für den Benutzermodus. Zum Beispiel erstellt .dump /mf oder .dump /ma eine größere und umfassendere Datei als .dump /f. Aus diesem Grund empfehlen wir Ihnen, für die Erstellung aller Dumpdateien im Benutzermodus .dump /m[MiniOptions] anstelle von .dump /f zu verwenden.

Wenn Sie eine Minidump-Datei mit Hilfe des Debuggers erstellen, können Sie auswählen, welche Informationen sie enthalten soll. Der Befehl .dump /m enthält grundlegende Informationen über die geladenen Module, aus denen der Zielprozess besteht, sowie Thread- und Stack-Informationen. Sie können den Basisbefehl ändern, indem Sie eine der in der folgenden Tabelle beschriebenen Optionen für Parameter verwenden:

.dump-Option Auswirkung auf Dumpdatei
/ma Erzeugt einen Minidump mit allen optionalen Zusätzen. Die Option /ma entspricht /mfFhut. Sie fügt dem Minidump vollständige Speicherdaten, Handle-Daten, Informationen über nicht geladene Module, grundlegende Speicherinformationen und Informationen zur Thread-Zeit hinzu.
/mf Fügt dem Minidump vollständige Speicherdaten hinzu. Alle zugänglichen eingebundenen Seiten, die der Zielanwendung gehören, sind enthalten.
/mF Fügt alle grundlegenden Speicherinformationen zum Minidump hinzu. Dieser Parameter fügt dem Minidump einen Stream hinzu, der alle grundlegenden Speicherinformationen enthält, nicht nur Informationen über gültigen Speicher. Der Debugger verwendet diese Informationen, um das komplette virtuelle Speicherlayout des Prozesses nachzubilden, wenn der Minidump debuggt wird.
/mh Fügt dem Minidump Daten über die Handles hinzu, die mit der Zielanwendung verbunden sind.
/mu Fügt dem Minidump Informationen über nicht entladene Module hinzu. Diese Option ist nur in Windows Server 2003 und späteren Versionen von Windows verfügbar.
/mt Fügt dem Minidump weitere Thread-Informationen hinzu. Zu den Thread-Informationen gehören auch die Thread-Zeiten, die mit .ttime (Thread-Zeiten anzeigen) angezeigt werden können, wenn Sie den Minidump debuggen.
/mi Fügt dem Minidump sekundären Speicher hinzu. Als Sekundärspeicher wird jeder Speicher bezeichnet, auf den ein Pointer auf dem Stack oder Backing Store verweist, sowie ein kleiner Bereich um diese Adresse herum.
/mp Fügt dem Minidump Prozessumgebungsblock- und Threadumgebungsblockdaten hinzu. Diese Informationen können nützlich sein, wenn Sie Zugang zu Windows-Systeminformationen über die Prozesse und Threads der Anwendung benötigen.
/mw Fügt alle übertragenen privaten Seiten mit Lese- und Schreibzugriff zum Minidump hinzu.
/md Fügt dem Minidump alle lesbaren und schreibbaren Datensegmente innerhalb des ausführbaren Images hinzu.
/mc Fügt Codeabschnitte innerhalb von Bildern hinzu.
/mr Löscht aus dem Minidump Teile des Stapels und des Speichers, die nicht zur Neuerstellung der Ablaufverfolgung verwendet werden. Lokale Variablen und andere Datentypwerte werden ebenfalls gelöscht. Diese Option verkleinert den Minidump nicht (die ungenutzten Speicherbereiche werden auf Null gesetzt), 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. Nur die Namen der Module sind enthalten. Die Option ist nützlich, wenn Sie die Privatsphäre der Verzeichnisstruktur des Benutzers schützen möchten.

Sie können diese Parameteroptionen kombinieren. Verwenden Sie zum Beispiel den Befehl .dump /mfiu, um einen mäßig großen Minidump zu erstellen, der nicht geladenen und sekundären Speicher enthält. Verwenden Sie den Befehl .dump /mrR, um einen Minidump zu erstellen, der einen Teil der Informationen des Benutzers löscht. Vollständige Details zur Syntax finden Sie unter .dump (Dumpdatei erstellen).

Tools zur Erstellung einer Dumpdatei

Es gibt verschiedene Tools, mit denen Sie eine Dumpdatei für den Benutzermodus erstellen können:

ProcDump

ProcDump ist ein Befehlszeilen-Dienstprogramm, mit dem Sie eine Anwendung auf CPU-Spitzen überwachen und während einer Spitze Crash-Dumps erzeugen können. Ein Administrator oder Entwickler kann die Dumpdateien verwenden, um die Ursache für den Spike zu ermitteln. ProcDump bietet auch die Überwachung von hängenden Fenstern (unter Verwendung der gleichen Definition eines hängenden Fensters, die auch Windows und der Task-Manager verwenden) und unbehandelten Ausnahmen. Sie können ProcDump verwenden, um Dumps auf der Grundlage der Werte von Systemleistungszählern zu erstellen. ProcDump kann auch als allgemeines Prozessdump-Dienstprogramm dienen, das Sie in andere Skripte einbetten können.

Informationen zur Erstellung einer Dumpdatei im Benutzermodus mit dem Dienstprogramm Sysinternals ProcDump finden Sie unter ProcDump.

WinDbg und CDB

Console Debugger (CDB) und Windows Debugger (WinDbg) sind Debugging-Tools, die im Windows Software Development Kit und Windows Driver Kit enthalten sind. Siehe die Installationsoptionen unter Herunterladen und Installieren des WinDbg Windows-Debuggers.

Sie können CDB oder WinDbg verwenden, um Dumpdateien für den Benutzermodus auf verschiedene Weise zu erstellen:

  • Automatisch eine Dumpdatei erstellen.
  • Erstellen von Dumpdateien, wenn Sie debuggen.
  • Verkleinern einer bestehenden Dumpdatei.

Weitere Informationen über die Tools finden Sie unter Erste Schritte mit Windows-Debugging und Debuggen mit Hilfe von CDB.

Automatisch eine Dumpdatei erstellen

Wenn ein Anwendungsfehler auftritt, kann Windows je nach den Postmortem-Debugging-Einstellungen auf eine von mehreren Arten reagieren. Wenn diese Einstellungen ein Debugging-Tool anweisen, eine Dumpdatei zu erstellen, wird eine Dumpdatei für den Benutzermodus erstellt. Für weitere Informationen, siehe Postmortem-Debugging aktivieren.

Erstellen von Dumpdateien beim Debuggen

Wenn CDB oder WinDbg eine Anwendung im Benutzermodus debuggt, können Sie auch den Befehl .dump (Dumpdatei erstellen) verwenden, um eine Dumpdatei zu erstellen.

Dieser Befehl führt nicht zur Beendigung der Zielanwendung. Durch die Auswahl bestimmter Befehlsoptionen können Sie eine Minidump-Datei erstellen, die genau die gewünschte Menge an Informationen enthält.

Eine bestehende Dumpdatei verkleinern

Sie können CDB oder WinDbg verwenden, um eine Dumpdatei zu verkleinern. Um eine Dumpdatei zu verkleinern, beginnen Sie mit dem Debuggen einer vorhandenen Dumpdatei. Verwenden Sie anschließend den Befehl .dump, um eine Dumpdatei von geringerer Größe zu erstellen.

Time Travel Debugging

Eine weitere Option zum Debuggen von Anwendungen im Benutzermodus ist das Time Travel Debugging (TTD). TTD ist ein Tool, mit dem Sie Ihren Prozess aufzeichnen können, während er läuft. Sie können die Aufzeichnung der Debugger-Sitzung erneut abspielen, um den Fehler zu suchen. Sie können ganz einfach zu verschiedenen Teilen der Aufzeichnung wechseln, um die Bedingungen zu verstehen, die zu dem Fehler geführt haben, und um herauszufinden, wie Sie das Problem beheben können.

TTD hat erhebliche Vorteile gegenüber Dumpdateien, in denen oft die Codeausführung fehlt, die zu dem Fehler geführt hat. Die Möglichkeit, in der Code-Ausführung zurückzugehen, kann bei der Ermittlung der eigentlichen Ursache hilfreich sein.

Weitere Informationen finden Sie unter Überblick über das Time Travel Debugging.

Siehe auch