Erste Schritte mit dem Windows-Debugging
In diesem Artikel wird beschrieben, wie Sie mit dem Debuggen für Windows beginnen. Wenn Sie den Debugger verwenden möchten, um ein Absturzabbild zu analysieren, lesen Sie Analysieren von Absturzabbilddateien mithilfe von WinDbg".
Führen Sie die folgenden Schritte aus, um mit dem Windows-Debugging zu beginnen.
1. Installieren des Windows-Debuggers
Informationen zur Installation von WinDbg finden Sie unter WinDbg installieren.
2. Identifizieren Sie die Host- und Zielsysteme
Zwei separate Computersysteme werden in der Regel für das Debuggen verwendet, da die Ausführung von Anweisungen auf dem Prozessor während des Prozesses häufig angehalten wird. Der Debugger läuft auf dem Host-System, und der Code, den Sie debuggen möchten, läuft auf dem Ziel-System.
Host <--------------------------------------------------> Ziel
In einigen Fällen ist es möglich, einen virtuellen Computer als zweites System zu verwenden. Beispielsweise kann ein virtueller PC auf demselben PC wie der Code ausgeführt werden, den Sie debuggen müssen. Wenn Ihr Code jedoch mit Hardware auf niedriger Ebene kommuniziert, ist die Verwendung eines virtuellen PCs möglicherweise nicht der beste Ansatz. Weitere Informationen finden Sie unter Einrichten des Netzwerkdebuggings eines virtuellen Computers – KDNET.
3. Bestimmen des Debuggertyps: Kernelmodus oder Benutzermodus
Als Nächstes müssen Sie bestimmen, ob Das Debuggen im Kernelmodus oder im Benutzermodus verwendet werden soll.
Das Betriebssystem und privilegierte Programme werden im Kernelmodus ausgeführt. Kernelmoduscode verfügt über die Berechtigung für den Zugriff auf einen beliebigen Teil des Systems und ist nicht wie Benutzermoduscode eingeschränkt. Kernelmoduscode kann Zugriff auf einen beliebigen Teil eines anderen Prozesses erhalten, der entweder im Benutzermodus oder im Kernelmodus ausgeführt wird. Ein Großteil der Kernfunktionen des Betriebssystems und viele Hardwaregerätetreiber werden im Kernelmodus ausgeführt.
Anwendungen und Subsysteme auf dem Computer werden im Benutzermodusausgeführt. Prozesse, die im Benutzermodus ausgeführt werden, tun dies innerhalb ihrer eigenen virtuellen Adressräume. Sie sind daran eingeschränkt, direkten Zugriff auf viele Teile des Systems zu erhalten, einschließlich Systemhardware, Arbeitsspeicher, der nicht für die Verwendung zugeordnet ist, und andere Teile des Systems, die die Systemintegrität beeinträchtigen könnten. Prozesse, die im Benutzermodus ausgeführt werden, sind effektiv vom System und von anderen Benutzermodusprozessen isoliert, sodass sie diese Ressourcen nicht beeinträchtigen können.
Wenn Sie einen Treiber debuggen möchten, bestimmen Sie, ob es sich bei dem Treiber um einen Kernelmodustreiber oder einen Benutzermodustreiber handelt. Windows Driver Model (WDM)-Treiber und Kernelmodustreiber-Framework (KERNEL-Mode Driver Framework, KMDF) sind beide Kernelmodustreiber. Wie der Name schon sagt, handelt es sich bei UMDF-Treibern (User-Mode Driver Framework) um Benutzermodustreiber.
Bei einigen Problemen kann es schwierig sein, zu bestimmen, in welchem Modus der Code ausgeführt wird. In diesem Fall müssen Sie möglicherweise einen Modus auswählen und sehen, welche Informationen in diesem Modus verfügbar sind. Einige Probleme erfordern die Verwendung des Debuggers sowohl im Benutzermodus als auch im Kernelmodus.
Je nachdem, in welchem Modus Sie debuggen, müssen Sie die Debugger möglicherweise auf unterschiedliche Weise konfigurieren und verwenden. Einige Debugbefehle funktionieren in beiden Modi identisch, und einige Befehle funktionieren unterschiedlich.
Erfahren Sie mehr über die Verwendung des Debuggers im Kernelmodus:
- Erste Schritte mit WinDbg (Kernelmodus)
- Universelle Treiber debuggen: Schritt-für-Schritt Übung (Echo Kernel Modus)
- Treiber debuggen: Schritt-für-Schritt Übung (Sysvad Kernel-Modus)
Erfahren Sie mehr über die Verwendung des Debuggers im Benutzermodus:
4. Wählen Sie Ihre Debuggerumgebung aus.
Der WinDbg-Debugger funktioniert in den meisten Situationen gut, aber es gibt Zeiten, in denen Sie möglicherweise einen anderen Debugger verwenden möchten, z. B. Konsolendebugger für die Automatisierung oder Visual Studio. Weitere Informationen finden Sie unter Debugger-Umgebungen.
5. Bestimmen Sie, wie das Ziel und der Host verbunden werden
In der Regel werden Ziel- und Hostsysteme über ein Ethernet-Netzwerk verbunden. Wenn Sie frühe Vorbereitungsarbeiten durchführen oder an einem Gerät keine Ethernet-Verbindung vorhanden ist, stehen andere Netzwerkverbindungsoptionen zur Verfügung. Weitere Informationen finden Sie in den folgenden Artikeln:
- KDNET-Netzwerk-Kernel-Debugging automatisch einrichten
- Einrichten des Netzwerkdebuggings einer virtuellen Maschine – KDNET
6. Wählen Sie entweder 32-Bit- oder 64-Bit-Debuggingtools aus.
Ob Sie einen 32-Bit- oder 64-Bit-Debugger benötigen, hängt von der Version von Windows ab, die auf den Ziel- und Hostsystemen ausgeführt wird, und ob Sie 32-Bit- oder 64-Bit-Code debuggen. Weitere Informationen finden Sie unter Auswählen von 32-Bit- oder 64-Bit-Debuggingtools.
7. Konfigurieren von Symbolen
Um alle erweiterten Funktionen zu verwenden, die WinDbg bereitstellt, müssen Sie die richtigen Symbole laden. Wenn Sie keine Symbole ordnungsgemäß konfiguriert haben, erhalten Sie Meldungen, die angeben, dass Symbole nicht verfügbar sind, wenn Sie versuchen, Funktionen zu verwenden, die von Symbolen abhängig sind. Weitere Informationen finden Sie unter Symbole für das Windows-Debugging.
8. Konfigurieren des Quellcodes
Wenn Sie ihren eigenen Quellcode debuggen möchten, müssen Sie einen Pfad zu Ihrem Quellcode konfigurieren. Weitere Informationen finden Sie unter Quellpfad.
9. Machen Sie sich mit dem Debuggervorgang vertraut
Im Abschnitt Debugger-Vorgang dieser Dokumentation wird der Debuggervorgang für verschiedene Aufgaben beschrieben. Beispielsweise beschreibt Beibehalten einer Protokolldatei in WinDbg, wie WinDbg eine Protokolldatei schreiben kann, die die Debugsitzung aufzeichnet.
10. Machen Sie sich mit Debuggingtechniken vertraut
Standard-Debugging-Techniken gelten für die meisten Debugging-Szenarien. Beispiele hierfür sind das Festlegen von Haltepunkten, das Überprüfen des Aufrufstapels und das Auffinden eines Speicherlecks. Spezielle Debugtechniken werden auf bestimmte Technologien oder Codetypen angewendet. Beispiele hierfür sind Plug-and Play-Debugging, KMDF-Debugging und RPC-Debugging.
11. Verwenden Der Debuggerverweisbefehle
Sie können unterschiedliche Debuggingbefehle verwenden, während Sie im Debugger arbeiten. Verwenden Sie den .hh-Befehl im Debugger, um hilfreiche Informationen über jeden Debug-Befehl anzuzeigen. Weitere Informationen zu verfügbaren Befehlen finden Sie in der Debuggerreferenz.
12. Verwenden von Debuggingerweiterungen für bestimmte Technologien
Es gibt mehrere Debuggingerweiterungen, die zum Analysieren domänenspezifischer Datenstrukturen verwendet werden können. Weitere Informationen finden Sie unter Spezielle Erweiterungen. Laden von Debuggererweiterungs-DLLs erläutert, wie Debuggererweiterungen geladen werden.
13. Erfahren Sie mehr über verwandte Windows-Internals
In dieser Dokumentation wird davon ausgegangen, dass Sie über Kenntnisse der Kerninterna von Windows verfügen. Weitere Informationen zu Windows-Internen, einschließlich Speichernutzung, Kontext, Threads und Prozessen, können Sie Ressourcen wie Windows Internals von Pavel Yosifovich, Mark E. Russinovich, David A. Salomon und Alex Ionescu überprüfen.
14. Überprüfen zusätzlicher Debugressourcen
Weitere Ressourcen sind die folgenden Bücher und Videos:
- Innerhalb von Windows debuggen: Praktische Debugging- und Tracing-Strategien von Tarik Soulami
- Advanced Windows Debugging von Mario Hewardt und Daniel Pravat
- Defrag Tools Videoserie, Episoden 13 bis 29, alles über WinDbg
Weitere Informationen
- Erste Schritte mit WinDbg (Kernelmodus)
- Erste Schritte mit WinDbg (Benutzermodus)
- Auswählen von 32-Bit- oder 64-Bit-Debuggingtools
- Debugging-Umgebungen
- Einrichten des Debuggings (Kernelmodus und Benutzermodus)
- Universelle Treiber debuggen – Schritt-für-Schritt Übung (Echo Kernel-Modus)
- Treiber debuggen – Schritt-für-Schritt Übung (Sysvad Kernel-Modus)