Debugger verwenden

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:

  1. 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.
  2. 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
    
  3. Warten Sie, bis die App geladen ist und ein Dialogfeld mit der Meldung erscheint, dass die App Warten auf einen Debugger.
  4. 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:

  1. Achten Sie darauf, dass alle für die Ausführung erforderlichen Build-Artefakte (z. B. Symbole) erforderlich sind lldbclient.py oder lldbclient.py sind vorhanden.
  2. 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.
  3. 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.

  4. Führen Sie den folgenden Befehl in dem Terminal aus, in dem Sie envsetup.sh ausgeführt haben und lunch:
    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 in launch.json und weiterhin ausgeführt wird. Das ist zu erwarten: beende das lldbclient.py-Programm nicht. Wenn Sie Lassen Sie --vscode-launch-file weg. Das Skript gibt das JSON-Snippet aus, das Sie müssen Sie manuell in launch.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.

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

  6. Wenn Sie mit der Fehlerbehebung fertig sind, rufen Sie das ausgeführte Terminal auf lldbclient.py und drücken Sie die Eingabetaste, um den lldbclient.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. Beispiel:

lldbclient.py --setup-forwarding vscode-lldb \
    --vscode-launch-props \
    '{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
    ...
Die Beispieleigenschaften würden VS Code 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