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:
- 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.
- 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
- Warten Sie, bis die App geladen ist und ein Dialogfeld angezeigt wird, das Ihnen mitteilt, dass die App auf einen Debugger wartet.
- 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:
- Sicherstellen , dass alle Build - Artefakte (wie Symbole) erforderlich sind, um
gdbclient.py
oderlldbclient.py
vorhanden sind. - Führen Sie den folgenden Befehl ein :
lldbclient.py --setup-forwarding vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
Dieser Befehl gibt ein JSON - Objekt und
lldbclient.py
läuft weiter. Dies wird erwartet; nicht das tötenlldbclient.py
Programm.Die
-r
Flag muss das letzte Flag sein , wenn es vorhanden aufgrund ist , wie Fahnen durch das Werkzeug analysiert werden. - 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. - Löschen Sie die neu hinzugefügte Debugger-Konfiguration.
- 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. - So laden Sie das Fenster des Debuggers Liste, drücken Sie Strg + Umschalt + P und Typ aufzufrischen
reload window
. - Wählen Sie die neue Debugger - Konfiguration und drücken Sie laufen. Der Debugger sollte sich nach 10 bis 30 Sekunden verbinden.
- Wenn Sie fertig sind Debuggen, gehen Sie zum Terminal laufen
lldbclient.py
und drücken Sie die Eingabetaste , die beendenlldbclient.py
Programm.