Debugger verwenden

Auf dieser Seite entnehmen Sie LLDB oder GDB für OS Entwicklung. Für App - Entwicklung finden Sie Debug Ihre Anwendung statt, die erklären , wie das Android - Studio GUI (auf LLDB basiert) verwenden.

GDB ist veraltet und wird in Kürze entfernt. Wenn Sie von GDB LLDB sind Schalt, sollten Sie wahrscheinlich durch das Lesen der Start LLDB Tutorial . Wenn Sie ein Experte GDB Benutzer, die sind GDB LLDB Befehl Karte ist sehr hilfreich , während transitioning.

Voraussetzungen

So verwenden Sie einen Debugger:

  • Stellen Sie die Build - Umgebung mit dem üblichen up envsetup.sh Befehl.
  • Führen Sie das gleiche lunch Befehl Sie beim Aufbau.

Für weitere Hilfe mit Ihrer Umgebung finden Sie unter Einrichten Einrichten Umgebung .

Debuggen von laufenden Apps oder Prozessen

Zu einer laufenden App oder native Daemon verwenden , um eine Verbindung gdbclient.py mit einer PID. Um beispielsweise den Prozess mit PID 1234 zu debuggen, führen Sie dies auf dem Host aus:

gdbclient.py -p 1234

Das Skript richtet die Portweiterleitung ein, startet den entsprechenden Remote-Debugging-Stub auf dem Gerät, startet den Debugger auf dem Host, konfiguriert ihn für die Suche nach Symbolen und verbindet ihn mit dem Remote-Debugging-Stub.

Debuggen des nativen Prozessstarts

Zum Debuggen ein Verfahren , wie es beginnt, Verwendung gdbclient.py mit der -r Option. Zum Beispiel, um Debug - ls /bin , führen dies auf dem Host:

gdbclient.py -r /system/bin/ls /bin

Geben Sie dann continue prompt im Debugger.

Debuggen des App-Starts

Manchmal möchte man eine App debuggen , wie es beginnt, wie wenn ein Absturz gibt es , und Sie wollen durch den Code Schritt , um zu sehen , was vor dem Absturz passiert ist . Anbringen Arbeiten in einigen Fällen, aber in anderen Fällen ist nicht möglich , da die App abstürzt , bevor Sie anhängen können. Der logwrapper Ansatz (für gebrauchte strace ) funktioniert nicht immer , weil die App keine Berechtigungen haben könnte einen Port zu öffnen, und gdbserver inherits diese Beschränkung.

Verwenden Sie zum Debuggen des App-Starts die Entwickleroptionen in den Einstellungen, um die App anzuweisen, auf das Anhängen eines Java-Debuggers zu warten:

  1. Gehen Sie zu Einstellungen> Entwickleroptionen> Wählen Sie Debug - App und wählen Sie Ihre App aus der Liste, klicken Sie dann auf Warten auf Debugger.
  2. Starten Sie die App, entweder von der Trägerrakete oder durch die Befehlszeile auszuführen:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. Warten Sie, bis die App geladen ist und ein Dialogfeld angezeigt wird, das Ihnen mitteilt, dass die App auf einen Debugger wartet.
  4. Bringen Sie gdbserver / gdbclient normalerweise gesetzten Breakpoints, dann den Prozess fortzusetzen.

Damit die App ausgeführt werden kann, hängen Sie einen Java Debug Wire Protocol (JDWP)-Debugger wie Java Debugger (jdb) an:

adb forward tcp:12345 jdwp:XXX  # (Where XXX is the PID
of the debugged process.)
jdb -attach localhost:12345

Debuggen von Apps oder Prozessen, die abstürzen

Wenn Sie möchten , debuggerd abgestürzt Prozesse auszusetzen , so dass Sie einen Debugger anhängen können, die entsprechende Eigenschaft festgelegt:

  • Nach Android 11
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 und unteren
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6.0 Eibisch und unteren
    adb shell setprop debug.db.uid 999999
    

Am Ende des üblichen Crash - Ausgangs, debuggerd liefert Kopieren und Einfügen Anweisungen in logcat zeigen , wie der Debugger zu verbinden , um den Prozess abgestürzt.

Debuggen ohne Symbole

Für 32-Bit - ARM, wenn Sie keine Symbole, gdb kann bestimmen nicht , welcher Befehlssatz es (ARM oder Thumb) ist zu demontieren. Um den als Standard ausgewählten Befehlssatz anzugeben, wenn Symbolinformationen fehlen, legen Sie die folgende Eigenschaft fest:

set arm fallback-mode arm  # or thumb

Debuggen mit VS-Code

LLDB unterstützt Debug - Plattform - Code auf Visual Studio - Code . Sie können das VS Code-Debugger-Front-End anstelle der LLDB-CLI-Schnittstelle verwenden, um auf Geräten ausgeführten nativen Code zu steuern und zu debuggen.

Bevor VS - Code unter Verwendung von für das Debuggen, installieren Sie die CodeLLDB Erweiterung .

So debuggen Sie Code mit VS Code:

  1. Sicherstellen , dass alle Build - Artefakte (wie Symbole) erforderlich sind, um gdbclient.py oder lldbclient.py vorhanden sind.
  2. Führen Sie den folgenden Befehl ein :
    lldbclient.py -p pid | -n proc-name |
    -r ... --setup-forwarding vscode ANY_OTHER_FLAGS

    Dieser Befehl gibt ein JSON - Objekt und lldbclient.py läuft weiter. Dies wird erwartet; nicht das töten lldbclient.py Programm.

  3. In der Registerkarte Debuggen in VS - Code, wählen Sie Add - Konfiguration, und wählen Sie dann LLDB: Benutzerdefinierte Start. Es öffnet sich ein launch.json Datei und fügt eine neue JSON - Objekt in eine Liste.
  4. Löschen Sie die neu hinzugefügte Debugger-Konfiguration.
  5. Kopieren Sie die JSON - Objekt gedruckt von lldbclient.py und fügen Sie ihn in das Objekt , das Sie gerade gelöscht. Speichern Sie die Änderungen.
  6. So laden Sie das Fenster des Debuggers Liste, drücken Sie Strg + Umschalt + P und Typ aufzufrischen reload window .
  7. Wählen Sie die neue Debugger - Konfiguration und drücken Sie laufen. Der Debugger sollte sich nach 10 bis 30 Sekunden verbinden.
  8. Wenn Sie fertig sind Debuggen, gehen Sie zum Terminal laufen lldbclient.py und drücken Sie die Eingabetaste , die beenden lldbclient.py Programm.