Debuggen auf Arm64

In diesem Artikel wird das Debuggen von Windows 10 auf ARM-Prozessoren beschrieben. Allgemeine Informationen zu Windows 10 auf Arm finden Sie unter Windows 10 Desktop auf Arm64.

Im Allgemeinen sollten Entwickler, die Benutzermodus-Apps debuggen, die Version des Debuggers verwenden, die der Architektur der Ziel-App entspricht. Verwenden Sie die Arm64-Version von WinDbg, um Arm64-Anwendungen im Benutzermodus zu debuggen, und verwenden Sie die Arm-Version von WinDbg, um ARM32-Anwendungen im Benutzermodus zu debuggen. Verwenden Sie die x86-Version von WinDbg, um x86-Anwendungen im Benutzermodus zu debuggen, die auf Arm64-Prozessoren ausgeführt werden.

In seltenen Fällen, in denen Sie Systemcode debuggen müssen , z. B. WOW64 oder CHPE, können Sie die Arm64-Version von WinDbg verwenden. Wenn Sie den Arm64-Kernel von einem anderen Computer debuggen, verwenden Sie die WinDbg-Version, die der Architektur des anderen Computers entspricht.

Abrufen von Arm-Debugtools für Windows

Sie können Debugtools für Arm64 erhalten, indem Sie das Windows SDK (Version 10.0.16299 oder höher) herunterladen. Wählen Sie während der Installation das Feld Debugtools für Windows aus.

Die Debugtools befinden sich im Debuggers Ordner im Installationsverzeichnis des Kits. Die x86-Tools befinden sich unter Debuggers\x86, die ARM32-Tools unter Debuggers\Armund die Arm64-Tools unter Debuggers\Arm64.

Debuggen von Arm64-Code

Arm64 WinDbg ist erforderlich, um Arm64-Code zu debuggen. Die Debugerfahrung ähnelt dem Debuggen von x86-Anwendungen mit x86 WinDbg unter x86 Windows, mit Ausnahme der folgenden Unterschiede.

  • Es gibt 32 allgemeine Register – x0 bis x28 und fp, lr, sp.
  • Das Programmzählerregister pc ist kein allgemeines Register.
  • Alle allgemeinen Register und pc-Register sind 64 Bit breit.
  • Höchstens zwei aktive Datenhaltepunkte für die Ausführung und zwei aktive Datenhaltepunkte für Lese-/Schreibspeicher. Weitere Informationen finden Sie unter Prozessorhaltepunkte.

Debuggen von x86-Benutzermoduscode

In den seltenen Fällen, in denen Sie Arm64 WinDbg verwenden müssen, um Ihren x86-Benutzermoduscode zu debuggen, können Sie die folgenden WinDbg-Befehle verwenden, um zwischen Kontexten zu wechseln:

  • .effmach x86: Wechseln Sie zum x86-Kontext, und zeigen Sie diesen an, und simulieren Sie den Effekt der Verwendung von x86 WinDbg.
  • .effmach arm64: Wechseln Zu Arm64-Kontext und Anzeigen
  • .effmach chpe: Wechseln Sie zum CHPE-Kontext, und sehen Sie diesen an.

Weitere Informationen zu .effmach finden Sie unter .effmach (Effective Machine).

Beachten Sie beim Debuggen von x86-Apps im Benutzermodus, unabhängig davon, welche WinDbg-Version Sie verwenden, diese Überlegungen.

  • Wenn ein Thread nicht aktiv debuggt wird (z. B. single-stepped, ein Breakpoint gefunden), keine Ausnahme gemeldet wird und nicht in einem Systemaufruf, ist der Registerkontext möglicherweise nicht auf dem neuesten Stand.
  • Der Emulator generiert intern Daten falsch ausgerichtete, unzulässige Anweisung, In-Page-E/A-Fehlerausnahmen und verarbeitet die generierten Ausnahmen. Wenn Sie WinDbg verwenden, sollten Sie diese Ausnahmen unter Debug-/Ereignisfiltern als Ignoriert konfigurieren... auf Updates zugreifen.
  • Bei Verwendung von Arm64 WinDbg im Benutzermodus wird einmaliges Durchlaufen über x86-& CHPE-Funktionsgrenzen nicht unterstützt. Um dies zu umgehen, legen Sie Haltepunkte für den Zielcode fest.

Allgemeine Informationen zu ARM64 und WOW64 finden Sie unter Ausführen von 32-Bit-Anwendungen im 64-Bit-Programmierhandbuch für Windows.

Informationen zum Debuggen von Anwendungen, die unter WOW64 ausgeführt werden, finden Sie unter Debuggen von WOW64.

Debuggen in Visual Studio

Informationen zum Debuggen von Arm in Visual Studio finden Sie unter Remotedebuggen.

Weitere Informationen