Details auf dieser Seite werden mithilfe von LDBs beschrieben. für die Betriebssystementwicklung. Informationen zur App-Entwicklung findest du unter Fehler in der App beheben , in dem erklärt wird, wie das GUI von Android Studio (auf LLDB-Basis) verwendet wird.
GDB wird nicht mehr unterstützt oder bereitgestellt. Wenn Sie von GDB zu LLDB wechseln, lesen Sie am besten zuerst LLDB-Anleitung Wenn Sie ein erfahrener GDB-Nutzer sind, Befehlszuordnung von GDB zu LLDB ist bei der Umstellung sehr hilfreich.
Voraussetzungen
So verwenden Sie einen Debugger:
- Richten Sie die Build-Umgebung mit dem üblichen
envsetup.sh
-Befehl ein. - Führen Sie denselben
lunch
-Befehl aus, den Sie beim Erstellen verwendet haben. Beachten Sie, dass das Mittagselement sollte genau mit dem Gerät übereinstimmen, für das Sie eine Fehlerbehebung durchführen. Wenn das Mittagsangebot nicht mit dem angeschlossenen Gerät übereinstimmt, erhalten Sie eine Fehlermeldung:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Schließen Sie Ihr Gerät an den Computer an.
Weitere Informationen zum Einrichten der Umgebung finden Sie unter Umgebung einrichten
Fehler in einer Binärdatei beheben
Zum Debuggen einer Binärdatei, die du auf deinem Computer erstellt hast, musst du zuerst die Binärdatei auf das Gerät kopieren und starten Sie den Debugger. Beispiel:
adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe
Fehler in laufenden Apps oder Prozessen beheben
Um eine Verbindung zu einer laufenden Anwendung oder einem nativen Daemon herzustellen, verwenden Sie
lldbclient.py
mit einer PID. Um z. B. den Prozess mit PID zu debuggen,
1234, führen Sie Folgendes auf dem Host aus:
lldbclient.py -p 1234
Das Skript richtet die Portweiterleitung ein und startet die entsprechende Remote-Debugging-Stub auf dem Gerät, startet den Debugger auf konfiguriert den Host so, dass er Symbole findet, an den Remote-Debugging-Stub.
Fehler beim Starten nativer Prozesse beheben
Um Fehler beim Start eines Prozesses zu beheben, verwenden Sie lldbclient.py
mit dem -r
Option. Wenn Sie beispielsweise ls /bin
debuggen möchten, führen Sie diesen Befehl auf dem Host aus:
lldbclient.py -r /system/bin/ls /bin
Geben Sie dann in der Eingabeaufforderung des Debuggers continue
ein.
Fehler beim Starten der Anwendung beheben
Manchmal möchten Sie Fehler in einer App beim Start beheben, beispielsweise bei einem Absturz.
und Sie den Code Schritt für Schritt durchgehen möchten, um zu sehen, was vor dem Absturz passiert ist.
Das Anhängen funktioniert in einigen Fällen, in anderen Fällen jedoch
da die App vor dem Anhängen abstürzt. Die
logwrapper
-Ansatz (für strace
verwendet)
funktioniert nicht immer, da die App
Berechtigungen zum Öffnen eines Ports und lldbserver
übernimmt diese
Einschränkung.
Um Fehler beim App-Start zu beheben, verwenden Sie die Entwickleroptionen in den Einstellungen, um Die Anwendung wartet, bis ein Java-Debugger angehängt wird:
- Gehen Sie zu Einstellungen > Entwickleroptionen > Wählen Sie Debug App und dann Ihre App aus der Liste aus und klicken Sie dann auf Auf Debugger warten.
- Starten Sie die App entweder über den Launcher oder über die Befehlszeile:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Warten Sie, bis die App geladen ist und ein Dialogfeld mit der Meldung erscheint, dass die App Warten auf einen Debugger.
lldbserver
/lldbclient
normal anhängen, festgelegt Haltepunkte und fahren Sie dann mit dem Vorgang fort.
Hängen Sie ein Java Debug Wire Protocol (JDWP) an, damit die Anwendung ausgeführt werden kann. wie Java Debugger (jdb):
adb forward tcp:12345 jdwp:XXX # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
Fehler in Apps oder Prozessen beheben, die abstürzen
Wenn Sie möchten, dass debuggerd
abgestürzte Prozesse anhält, damit Sie
einen Debugger anhängen möchten, legen Sie die entsprechende Eigenschaft fest:
- Ab Android 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 und niedriger
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow und niedriger
adb shell setprop debug.db.uid 999999
Am Ende der üblichen Absturzausgabe bietet debuggerd
die Funktion zum Kopieren und Einfügen
Anweisungen in Logcat, die zeigen, wie der Debugger mit dem abgestürzten Prozess verbunden wird
Fehler mit VS Code beheben
LLDB unterstützt Debugging-Plattformcode auf Visual Studio Code. Sie können das VS Code-Debugger-Frontend anstelle der LLDB-Befehlszeile verwenden, um zu steuern und nativer Code, der auf Geräten ausgeführt wird, zu debuggen.
Bevor Sie VS Code für das Debugging verwenden, installieren Sie den <ph type="x-smartling-placeholder"></ph> CodeLLDB-Erweiterung.
So debuggen Sie Code mit VS Code:
- Achten Sie darauf, dass alle für die Ausführung erforderlichen Build-Artefakte (z. B. Symbole) erforderlich sind
lldbclient.py
oderlldbclient.py
sind vorhanden. - Drücken Sie in VS Code Strg + Umschalttaste + P, um einen Befehl auszuführen und nach Debug:
Add Configuration... (Konfiguration hinzufügen...) und wählen Sie dann LLDB aus.
Dadurch wird eine
launch.json
-Datei geöffnet und einer Liste ein neues JSON-Objekt hinzugefügt. - Ersetzen Sie die neu hinzugefügte Debugger-Konfiguration durch zwei Kommentarzeilen:
// #lldbclient-generated-begin
und// #lldbclient-generated-end
, also Ihre Konfigurationsliste so aussieht:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
ermittelt anhand dieser Kommentare, wo die Konfiguration geschrieben werden soll. Wenn es weitere Elemente in der Liste sind, fügen Sie die Kommentarzeilen am Ende nach den anderen Konfigurationen ein. - Führen Sie den folgenden Befehl in dem Terminal aus, in dem Sie
envsetup.sh
ausgeführt haben undlunch
:lldbclient.py --setup-forwarding vscode-lldb \ --vscode-launch-file LAUNCH_JSON_PATH \ ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
lldbclient.py
schreibt die generierte Konfiguration inlaunch.json
und weiterhin ausgeführt wird. Das ist zu erwarten: beende daslldbclient.py
-Programm nicht. Wenn Sie Lassen Sie--vscode-launch-file
weg. Das Skript gibt das JSON-Snippet aus, das Sie müssen Sie manuell inlaunch.json
kopieren.Aufgrund der Art und Weise, wie Flags geparst werden, muss das Flag
-r
das letzte Flag sein, wenn es vorhanden ist vom Tool aus. - Öffnen Sie die Seitenleiste Run and Debug (Ausführen und Fehler beheben). Die neue Konfiguration sollte nun im
Debugger-Liste. Klicken Sie auf Debugging starten (F5). Der Debugger sollte eine Verbindung herstellen nach
10 bis 30 Sekunden lang.
Wenn die neue Konfiguration nicht in der Ansicht „Ausführen“ und „Fehlerbehebung“ angezeigt wurde, laden Sie das Fenster neu. Debugger-Liste aktualisieren: Drücken Sie Strg + Umschalttaste + P und geben Sie
reload window
- Wenn Sie mit der Fehlerbehebung fertig sind, rufen Sie das ausgeführte Terminal auf
lldbclient.py
und drücken Sie die Eingabetaste, um denlldbclient.py
-Programm. Bei nachfolgenden Ausführungen des Skripts wird die Konfiguration generiert. zwischen den#lldbclient-generated
-Kommentaren einfügen und den alten Inhalt ersetzen, manuell entfernen.
Sie können der generierten Startkonfiguration mithilfe der Methode
Flag --vscode-launch-props
. Hier einige Beispiele:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
Die Beispieleigenschaften würden VS Code dazu veranlassen, eine Aufgabe mit dem Namen Build
vor dem Debugging und
hängt einen neuen Initialisierungsschritt für die Fehlerbehebung an die vom Skript generierten Schritte an. Unter
Übersicht der verfügbaren Properties in der
<ph type="x-smartling-placeholder"></ph>
VS Code-Dokumentation und im Nutzerhandbuch der
<ph type="x-smartling-placeholder"></ph>
CodeLLDB-Erweiterung