Plattformcode debuggen

Android Studio for Platform (ASfP) bietet einen leistungsstarken Debugger, mit dem Sie Folgendes tun können:

  • Wählen Sie ein Gerät für das Debugging aus.
  • Legen Sie Haltepunkte in Ihrem Java-, Kotlin-, C/C++- und Rust-Code fest.
  • Variablen untersuchen und Ausdrücke zur Laufzeit auswerten

Bevor Sie den Debugger verwenden können, müssen Sie Ihren Build auf ein Gerät oder einen Emulator flashen.

Fehlerbehebung im App-Prozess (Java/Kotlin)

So beheben Sie Fehler in einem Java- oder Kotlin-Anwendungsprozess:

  1. Legen Sie Haltepunkte in Ihrem Java- oder Kotlin-Code in ASfP fest.

  2. Wählen Sie im Menü Run > Attach Debugger to Android Process (Ausführen > Debugger an Android-Prozess anhängen) aus.

  3. Achten Sie darauf, dass im Dialogfeld Prozess auswählen der Debug-Typ auf Nur Java festgelegt ist.

  4. Wählen Sie Ihr Gerät aus der Liste aus.

  5. Wählen Sie den spezifischen Bewerbungsprozess aus, den Sie debuggen möchten.

  6. Klicken Sie auf OK.

  7. Interagieren Sie mit der Anwendung auf Ihrem Gerät, um die Haltepunkte zu erreichen.

Systemprozess-Debugging (C/C++)

So debuggen Sie einen in C oder C++ geschriebenen Systemprozess:

  1. Prüfen Sie, ob nur ein Gerät oder Emulator ausgeführt wird.

  2. Öffnen Sie ein Terminal und führen Sie adb root über das Stammverzeichnis Ihres AOSP-Checkout aus: bash adb root

  1. Legen Sie Haltepunkte in Ihrem C/C++-Code in ASfP fest.

  2. Wählen Sie im Menü Run > Attach Debugger to Android Process (Ausführen > Debugger an Android-Prozess anhängen) aus.

  3. Ändern Sie im Dialogfeld Prozess auswählen den Debug-Typ in Nur nativ oder Dual (Java + nativ).

  4. Klicken Sie das Kästchen Alle Prozesse anzeigen an, um Systemprozesse zu sehen.

  5. Wählen Sie Ihr Gerät aus der Liste aus.

  6. Wählen Sie den Systemprozess aus, den Sie debuggen möchten, z. B. surfaceflinger oder system_server.

  7. Klicken Sie auf OK.

  8. Interagieren Sie mit dem Gerät, um die Haltepunkte zu erreichen.

Rust-Debugging

ASfP unterstützt das Debugging von Rust mithilfe des Debug Adapter Protocol (DAP) mit LLDB. In diesem Abschnitt wird beschrieben, wie Sie CodeLLDB als Debug Adapter Server einrichten und Rust-Code auf dem Host und auf einem Android-Gerät debuggen.

CodeLLDB als Debugadapterserver einrichten

  1. Erstellen Sie eine neue Ausführungs-/Fehlerbehebungskonfiguration für das Debug Adapter Protocol:

    1. Wählen Sie im Menü Run > Edit Configurations aus.
    2. Klicken Sie auf die Schaltfläche +.
    3. Wählen Sie Debug Adapter Protocol aus.
  2. Klicken Sie auf dem Server-Tab auf Neuen Server erstellen.

  3. Klicken Sie im neu geöffneten Dialogfeld auf Vorlage auswählen und wählen Sie CodeLLDB aus der Liste aus.

  4. Nachdem Sie die CodeLLDB-Vorlage ausgewählt haben, wird der neue Server mit einer vordefinierten Konfiguration hinzugefügt.

    1. Aktivieren Sie das ausführliche Tracing, indem Sie im Drop-down-Menü Trace die Option Verbose auswählen.
    2. Fügen Sie eine Umgebungsvariable hinzu, die den Pfad zu lldb-server in Ihren vorkompilierten Android-Quellen angibt:
        LLDB_DEBUGSERVER_PATH=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/runtimes_ndk_cxx/x86_64/lldb-server
        ```
    
    Replace `REPO_ROOT` with the absolute path to your Android source checkout.
    To find `CLANG_VERSION`, run the `get_clang_version.py` script from the root of
    your Android source tree:
    
    ```bash
        ./build/soong/scripts/get_clang_version.py
    
    1. Ändern Sie den Abschnitt <<insert base directory>> nicht.

Fehler bei Rust-Binärdateien auf dem Host beheben

  1. Öffnen Sie den Tab Configuration in Ihrer Ausführungs-/Debugkonfiguration für das Debugadapterprotokoll.
  2. Wählen Sie Starten als Debug-Modus aus.
  3. Aktualisieren Sie das Arbeitsverzeichnis und wählen Sie die Binärdatei aus, die Sie debuggen möchten.
  4. Klicken Sie auf OK, um die Konfiguration zu speichern.
  5. Starten Sie die Debugging-Sitzung, indem Sie neben der Konfiguration auf das Symbol Debuggen klicken.

Wenn Sie diesen Befehl zum ersten Mal ausführen, wird CodeLLDB heruntergeladen. In der Konsole sollten DAP-Traces angezeigt werden. Haltepunkte, die in Ihrem Rust-Code festgelegt sind, sollten wie erwartet erreicht werden.

Rust-Binärdateien auf einem Android-Gerät debuggen (Attach-Modus)

  1. PID ermitteln:Ermitteln Sie die Prozess-ID (PID) der Anwendung, die Sie auf dem Android-Gerät debuggen möchten.

  2. lldb-Server auf dem Gerät starten:Führen Sie im Stammverzeichnis Ihres Android-Quellbaum-Checkouts das lldbclient.py-Skript aus und ersetzen Sie <PID> durch die Prozess-ID:

    lldbclient.py --setup-forwarding vscode-lldb -p <PID>
    

    Mit diesem Skript wird das richtige lldb-server auf das Gerät übertragen, das Gerät gestartet, die Portweiterleitung eingerichtet (Hostport 5039 zum Gerät) und die für die nächsten Schritte erforderliche DAP-JSON-Konfiguration ausgegeben. Lassen Sie dieses Terminal geöffnet.

  3. CodeLLDB-Debugadapter auf dem Host starten:

    • Wechseln Sie zum Verzeichnis der CodeLLDB-Erweiterung (Standard: ~/.lsp4ij/dap/codelldb/extension/adapter).
    • Legen Sie die erforderlichen Umgebungsvariablen fest und starten Sie den Adapterserver. Ersetzen Sie dabei REPO_ROOT und CLANG_VERSION durch die Werte, die Sie bei der Servereinrichtung festgelegt haben:
        # Sets PYTHONHOME env variable
        export PYTHONHOME=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3
    
        # Tell the dynamic linker where to find python libs
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3/lib
    
        # Starts the CodeLLDB Debugger Adapter server on port 1234
        ./codelldb --liblldb REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/lib/liblldb.so --port 1234
    
  4. ASfP-DAP-Client konfigurieren:

    1. Kehren Sie in ASfP zu Ihrer Run/Debug-Konfiguration für das Debug-Adapterprotokoll zurück.
    2. Wählen Sie den Tab Konfiguration aus.
    3. Stellen Sie Debug-Modus auf Anhängen ein.
    4. Legen Sie Adresse auf localhost fest.
    5. Legen Sie für Port den Wert 1234 fest.
    6. Fügen Sie die JSON-Ausgabe aus dem Befehl lldbclient.py (Schritt 2) in das Feld DAP-Parameter (JSON) ein.
  5. Klicken Sie auf Debuggen, um die Debugging-Sitzung zu starten.

Fehlerbehebung

  • Wenn der Fehler error: Connection shut down by remote side while waiting for reply to initial handshake packet angezeigt wird, beenden Sie die aktuelle Debugging-Sitzung und starten Sie lldb-server auf dem Gerät und den CodeLLDB-Adapter auf dem Host neu.