Frage

Wie verwende ich WinDbg für eine Abbilddatei zu analysieren?

War es hilfreich?

Lösung

Hier sind einige allgemeine Schritte, die Sie auf Ihrem Weg bekommen:

Zunächst müssen Sie Ihre Compiler-Einstellungen so ändern, dass es PDB-Dateien erstellt, auch für Release-Builds. Spätere Versionen der Visual C ++ Compiler dies standardmäßig tun, aber in vielen Versionen von Visual C ++ müssen Sie tun dies selbst. Programm erstellen Datenbank-Dateien und hält dann ein Archiv der Dateien zusammen mit jedem Build Ihrer Anwendung. Es ist wichtig, dass jeder Build Ihrer Anwendungen einen eigenen Satz von PDBs hat. Sie können nicht nur die gleichen, die wiederverwendet werden Sie mit Build 10 zu untersuchen, die Deponien von Build 15, beispielsweise erzeugt gemacht. Über die gesamte Lebensdauer des Projekts, werden Sie mit einer Tonne PDBs am Ende, so darauf vorbereitet sein.

Als nächstes müssen Sie in der Lage sein, die genaue Version der Anwendung zu identifizieren, die die Speicher-Abbild-Datei generiert. Wenn Sie Ihre eigene Minidumps schaffen (durch Aufruf von MiniDumpWriteDump () zum Beispiel ), wahrscheinlich der einfachste Weg, dies zu tun, ist einfach Teil des Dateinamens des MiniDump die vollständige Versionsnummer Ihrer Anwendung zu machen. Sie werden eine vernünftige Version Nummerierungsschema anstelle für diese arbeiten haben müssen. In meinem Geschäft, erhöhen wir die Build-Nummer in allen Filialen von einem jedes Mal, wenn der Autobuilder ein Build erstellt.

Nun, da Sie die Dump-Datei vom Kunden erhalten haben, wissen Sie die genaue Version der Anwendung, die den Dump erstellt, und Sie haben die PDB-Dateien für diesen Build gefunden.

Nun müssen Sie gehen durch Ihre Geschichte Quellcodeverwaltung und finden Sie den Quellcode für diese genaue Version der Software. Der beste Weg, dies zu tun ist ‚Labels‘, um Ihre Zweige jedes Mal, wenn Sie einen Build machen anzuwenden. Legen Sie den Wert des Labels auf die genaue Versionsnummer, und es wird einfach in der Geschichte zu finden.

Sie sind fast fertig WinDbg / Visual C ++ zu feuern:

  1. Holen Sie sich den kompletten Quellbaum für diese Version der Anwendung. Legen Sie es in einem separaten Ort auf Ihrer Festplatte, sagen c:\app_build_1.0.100 für Anwendungsversion 1.0 build # 100.
  2. Lernen Sie die Binärdateien für die genaue Version der Anwendung und legt sie irgendwo auf der Festplatte. Es könnte am einfachsten einfach sein, diese Version der Anwendung zu installieren, um die Binaries zu erhalten.
  3. Legen Sie die PDB-Dateien in der gleichen Position wie die Binärdateien in Schritt 2.

Jetzt haben Sie zwei Möglichkeiten für die Dump-Datei anzeigen. Sie können Visual Studio oder WinDbg verwenden. Visual Studio ist einfacher, aber WinDbg ist viel mächtiger. Die meiste Zeit die Funktionalität in Visual Studio ausreichen.

Visual Studio zu verwenden, alles, was Sie tun müssen, ist die Speicher-Abbild-Datei zu öffnen, wie es ein Projekt ist. Nach dem Öffnen „run“ die Dump-Datei ( F5 Standardeinstellung) und wenn alle Pfade korrekt eingestellt sind wird es Ihnen Recht auf den Code zu nehmen, die abgestürzt ist, geben Sie einen Call-Stack, etc.

So verwenden Sie WinDbg, müssen Sie durch ein paar Reifen springen:

  1. Starten Sie WinDbg
  2. Öffnen Sie die Dump-Datei. ( Strg + D Standardeinstellung)
  3. WinDbg per eMail die richtigen Microsoft-Symboldateien zu gehen zu bekommen. Typ .symfix. Dies kann einige Zeit in Anspruch nehmen, da es eine Tonne Material ziehen wird nach unten aus dem Internet.
  4. Tell WinDbg wobei die Symbole (PDB-Dateien) sind. Typ .sympath+ c:\pdblocation, Ersetzen, wo Sie die PDB-Dateien für den Pfad setzen. Stellen Sie sicher, dass Sie auf das Pluszeichen bekommen dort ohne Leerzeichen zwischen .sympath und dem + Zeichen oder sonst werden Sie vermasseln Schritt 3.
  5. Sagen Sie WinDbg, wo der Quellcode ist. Geben Sie .srcpath c:\app_build_1.0.100 den Pfad Ersetzen, wo Sie Code aus der Quellcodeverwaltung bekam für diese Version der Software.
  6. Tell WinDbg die Dump-Datei zu analysieren. Geben Sie !analyze -v

Nach einigen Augenblicken, wenn alles richtig konfiguriert ist, WinDbg werden Sie sich an den Ort Ihrer Absturz nehmen. An dieser Stelle haben Sie eine Million Möglichkeiten zum Graben tief in dem Speicherraum der Anwendung, der Zustand der kritischen Abschnitte, Fenster, etc. Aber das ist Weg über den Rahmen dieses Beitrags.

Viel Glück!

Andere Tipps

(siehe "Dump" Abschnitte unten)

Grund Tutorials und Demonstrationen der Verwendung von WinDbg

Verschiedene Möglichkeiten auf "Start" / Attach WinDBG

Workspaces

Zu verstehen, wie Workspaces arbeiten ...

Cmdtree

A „cmdtree“ ermöglicht es Ihnen, ein „Menü“ von Debuggerkommandos für die einfachen Zugriff zu definieren, um häufig verwendeten Befehle, ohne die lapidaren Befehlsnamen merken zu müssen.

Sie müssen alle Befehlsdefinitionen in die gleiche cmdtree Textdatei nicht setzen .... Sie halten sie mehrere diejenigen trennen und laden, wenn Sie wollen (sie dann ihr eigenes Fenster bekommen).

Startskript

Sie können die Option -c in der Befehlszeile verwenden, um automatisch einen WinDBG Skript ausgeführt, wenn Sie WinDBG starten.

Gibt Gelegenheit einzuschalten DML (Debugger Markup Language) Modus, laden bestimmte Erweiterungen, setzen .NET Ausnahme Stützpunkte, setzen Kernel-Flags (zB bei der Kernel-Debugging Sie könnten die DbgPrint Maske ändern müssen, so finden Tracing Sie Informationen ... .ED nt! Kd_DEFAULT_Mask 0xffffffff), Last cmdtrees etc.

Ein Beispiel Script:

$$ Include a directory to search for extensions
$$ (point to a source controlled or UNC common directory so that all developers get access)
.extpath+"c:\svn\DevTools\WinDBG\Extensions"
$$ When debugging a driver written with the Windows Driver Framework/KMDF
$$ load this extension that comes from the WinDDK.
!load C:\WinDDK\7600.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK\7600.16385.1\tools\tracing\i386\wdf01009.tmf
$$ load some extensions
.load msec.dll
.load byakugan.dll
.load odbgext.dll
.load sosex
.load psscor4
$$ Make commands that support DML (Debugger Markup Language) use it
.prefer_dml 1
.dml_start
$$ Show NTSTATUS codes in hex by default
.enable_long_status 1
$$ Set default extension
.setdll psscor4
$$ Show all loaded extensions
.chain /D
$$ Load some command trees
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree1.txt
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree2.txt
$$ Show some help for the extensions
!wdfkd.help
!psscor4.help
.help /D

Befehl Cheat Sheets

Erweiterungen

„Erweiterungen“ können Sie den Bereich von Befehlen / Funktionen innerhalb WinDBG unterstützt erweitern.

Schreiben Sie Ihre eigene Erweiterung

WinDBG Mit verwaltetem Code

Debuggen

Scripting (C #, PS, Python, WinDBG)

Debuggers / Tools, die die dbgeng.dll API / WinDBG Tools

verwenden

Verschiedene Möglichkeiten zur Generierung von Crash-Dump-Dateien für Post-Mortem-Analyse

Dump Analysis Tools

  • Bluescreenview - findet die minidump .dmp die von Windows nach einem BSOD gespeicherten Dateien und extrahiert Informationen über das, was den Absturz verursacht
  • Debug.Analyzer (können Dump-Dateien analysieren und Plug-Ins können in .NET geschrieben werden)
  • SAD - Einfach Nach Dump (post mortem-Analysator)
  • Volatilität - Rahmen für die "Speicher" aufgezeichnet in Dump-Dateien ( Blatt betrügen)

Dump bezogenen Tools

  • Citrix dumpcheck - prüft die Konsistenz der Dump-Datei (sieht aus wie es ist aufgegeben worden link + Link )
  • Dumpchk (Teil der Debugging Tools) - prüft Konsistenz einer Dump-Datei
  • MoonSols Windows Memory Toolkit (früher < a href = "http://web.archive.org/web/20100119182120/http://windd.msuiche.net/" rel = "noreferrer"> windd ) - konvertiert verschiedene rohe Speicherabbilddateien in WinDBG kompatibel DMP-Dateien
  • vm2dmp - Microsoft Hyper-V VM Staat Speicherabbild Converter
  • vmss2core - wandelt VMWare Snapshot-Datei in eine Core-Dump-Datei ( herunterladen ), ( Anweisungen )

Kernel-Debugging von virtuellen Maschinen

  • VMKD - Virtual Machine KD Extensions
  • VirtualKD - (Kernel-Debugger-Unterstützung für OS gehosteten in VMWare / VirtualBox)

Videos

Blogs

Einige Blogs (Mischung von nativem und verwalteten Code Debugging).

Erweiterte Artikel und Tutorial Ressourcen

Alternative Debuggers

Nützliche Links

Dies ist eine wirklich große Frage.

  1. Der erste Schritt ist die Speicher-Abbild-Datei in eine WinDbg Instanz zu laden.
  2. Als nächstes müssen Sie sicherstellen, dass Sie Symbole Setup haben.
  3. Schließlich können Sie den Befehl !analyze -v führen eine grundlegende Analyse auf sie durchgeführt zu bekommen. Sie benötigen Symbol Informationen für Ihren Code haben Dump zu machen lohnt Dateien.

Die Website Speicherabbild, Software Trace, Test, Malware, Victimware und Intelligence Analysis Portal hat sich für mich sehr informativ. Ich habe auch wirklich das Buch Advanced Windows Debugging von Mario Hewardt und Daniel Pravat.

Tess Ferrandez hat eine große Reihe von grundlegenden Übungen und Labore mit Windbg loszulegen. Ich empfehle sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top