Erste Schritte mit 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-Debuggen zu beginnen.

1. Identifizieren der 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 wird auf dem Hostsystem ausgeführt, und der Code, den Sie debuggen möchten, wird auf dem Zielsystem ausgeführt.

Host <--------------------------------------------------> Ziel

Diagram illustrating the connection between host and target systems with a double arrow.

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 Netzwerkdebuggings eines virtuellen Computers einrichten – KDNET.

2. 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. Der Kernelmoduscode verfügt über die Berechtigung für den Zugriff auf einen beliebigen Teil des Systems und ist nicht wie Benutzermoduscode eingeschränkt. Der 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 Untersysteme auf dem Computer werden im Benutzermodus ausgefü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 Debugger-Befehle funktionieren in beiden Modi identisch, und einige Befehle funktionieren unterschiedlich.

Erfahren Sie mehr über die Verwendung des Debuggers im Kernelmodus:

Erfahren Sie mehr über die Verwendung des Debuggers im Benutzermodus:

3. 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.

4. 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 folgenden Artikeln:

5. Wählen Sie entweder 32-Bit- oder 64-Bit-Debugging-Tools 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-Debugging-Tools.

6. Symbole konfigurieren

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.

7. 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.

8. Machen Sie sich mit dem Debuggervorgang vertraut

Im Abschnitt Debugger-Vorgang dieser Dokumentation wird der Debuggervorgang für verschiedene Aufgaben beschrieben. Beispielsweise wird beim Laden von Debuggererweiterungs-DLLs erläutert, wie Debuggererweiterungen geladen werden.

9. Machen Sie sich mit Debuggingtechniken vertraut

Standard-Debuggingtechniken gelten für die meisten Debug-Szenarien, und Beispiele umfassen das Festlegen von Haltepunkten, das Überprüfen des Aufrufstapels und das Auffinden eines Speicherverlusts. Spezielle Debugtechniken gelten für bestimmte Technologien oder Codetypen. Beispiele hierfür sind Plug-and-Play-Debugging, KMDF-Debugging und RPC-Debugging.

10. 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 zu jedem Debugbefehl anzuzeigen. Weitere Informationen zu verfügbaren Befehlen finden Sie in der Debuggerreferenz.

11. Verwenden von Debuggingerweiterungen für bestimmte Technologien

Es gibt mehrere Debugerweiterungen, die zum Analysieren von Standard-spezifischen Datenstrukturen verwendet werden können. Weitere Informationen finden Sie unter Spezialisierte Erweiterungen.

In dieser Dokumentation wird davon ausgegangen, dass Sie über Kenntnisse der wichtigsten Internen 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.

13. Überprüfen zusätzlicher Debugressourcen

Weitere Ressourcen sind die folgenden Bücher und Videos:

  • In Windows Debugging: Praktische Debugging- und Ablaufverfolgungsstrategien von Tarik Soulami
  • Erweitertes Windows Debugging von Mario Hewardt und Daniel Pravat
  • Defrag Tools Videoserie, Episoden 13 bis 29, alles über WinDbg

Siehe auch