Debugowanie kodu platformy

Android Studio for Platform (ASfP) udostępnia zaawansowany debuger, który umożliwia:

  • Wybierz urządzenie, na którym chcesz debugować.
  • Ustawiaj punkty przerwania w kodzie Java, Kotlin, C/C++ i Rust.
  • Sprawdzaj zmienne i obliczaj wyrażenia w czasie działania.

Zanim użyjesz debugera, musisz wgrać kompilację na urządzenie lub emulator.

Debugowanie procesu aplikacji (Java/Kotlin)

Aby debugować proces aplikacji w Javie lub Kotlinie:

  1. Ustawiaj punkty przerwania w kodzie Java lub Kotlin w ASfP.

  2. W menu wybierz Run > Attach Debugger to Android Process (Uruchom > Dołącz debuger do procesu Androida).

  3. W oknie Wybierz proces sprawdź, czy Typ debugowania jest ustawiony na Tylko Java.

  4. Wybierz urządzenie z listy.

  5. Wybierz konkretny proces aplikacji, który chcesz debugować.

  6. Kliknij OK.

  7. Korzystaj z aplikacji na urządzeniu, aby osiągnąć punkty przerwania.

Debugowanie procesu systemowego (C/C++)

Aby debugować proces systemowy napisany w języku C lub C++:

  1. Sprawdź, czy masz tylko jedno urządzenie lub emulator.

  2. Otwórz terminal i uruchom polecenie adb root w katalogu głównym wyewidencjonowanego kodu AOSP: bash adb root

  1. Ustawiaj punkty przerwania w kodzie C/C++ w ASfP.

  2. W menu wybierz Run > Attach Debugger to Android Process (Uruchom > Dołącz debuger do procesu Androida).

  3. W oknie Wybierz proces zmień Typ debugowania na Tylko natywny lub Podwójny (Java + natywny).

  4. Aby zobaczyć procesy systemowe, zaznacz pole Pokaż wszystkie procesy.

  5. Wybierz urządzenie z listy.

  6. Wybierz konkretny proces systemowy, który chcesz debugować (np. surfaceflinger lub system_server).

  7. Kliknij OK.

  8. Wejdź w interakcję z urządzeniem, aby osiągnąć punkty przerwania.

Debugowanie kodu w Rust

ASfP obsługuje debugowanie kodu w Rust przy użyciu protokołu Debug Adapter Protocol (DAP) z LLDB. W tej sekcji opisujemy, jak skonfigurować CodeLLDB jako serwer adaptera debugowania i debugować kod Rust na hoście i urządzeniu z Androidem.

Konfigurowanie CodeLLDB jako serwera adaptera debugowania

  1. Utwórz nową konfigurację uruchamiania i debugowania Debug Adapter Protocol:

    1. W menu wybierz Uruchom > Edytuj konfiguracje.
    2. Kliknij przycisk +.
    3. Wybierz Debug Adapter Protocol (Protokół adaptera debugowania).
  2. Na karcie serwera kliknij Utwórz nowy serwer.

  3. W nowo otwartym oknie dialogowym kliknij Wybierz szablon i wybierz z listy CodeLLDB.

  4. Po wybraniu szablonu CodeLLDB nowy serwer zostanie dodany z wstępnie zdefiniowaną konfiguracją.

    1. Włącz śledzenie szczegółowe, wybierając Szczegółowe w menu Śledzenie.
    2. Dodaj zmienną środowiskową, która określa ścieżkę do lldb-server w wstępnie skompilowanych plikach źródłowych Androida:
        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. Nie zmieniaj sekcji <<insert base directory>>.

Debugowanie plików binarnych Rust na hoście

  1. Otwórz kartę Configuration (Konfiguracja) w konfiguracji protokołu adaptera debugowania Uruchom/Debuguj.
  2. Wybierz Uruchom jako Tryb debugowania.
  3. Zaktualizuj katalog roboczy i wybierz plik binarny, który chcesz debugować.
  4. Aby zapisać konfigurację, kliknij OK.
  5. Rozpocznij sesję debugowania, klikając ikonę Debuguj obok konfiguracji.

Przy pierwszym uruchomieniu tego polecenia zostanie pobrany program CodeLLDB. W konsoli powinny być widoczne ślady DAP. Punkty przerwania ustawione w kodzie Rust powinny być osiągane zgodnie z oczekiwaniami.

Debugowanie plików binarnych Rust na urządzeniu z Androidem (tryb dołączania)

  1. Znajdź identyfikator PID: określ identyfikator procesu (PID) aplikacji, którą chcesz debugować na urządzeniu z Androidem.

  2. Uruchom serwer lldb na urządzeniu: w katalogu głównym drzewa źródłowego Androida uruchom skrypt lldbclient.py, zastępując <PID> identyfikatorem procesu:

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

    Ten skrypt przesyła prawidłowy plik lldb-server na urządzenie, uruchamia go, konfiguruje przekierowanie portów (port hosta 5039 na urządzenie) i wyświetla konfigurację JSON DAP potrzebną w kolejnych krokach. Nie zamykaj tego terminala.

  3. Uruchom adapter debugowania CodeLLDB na hoście:

    • Przejdź do katalogu rozszerzenia CodeLLDB (domyślnie:~/.lsp4ij/dap/codelldb/extension/adapter).
    • Ustaw wymagane zmienne środowiskowe i uruchom serwer adaptera, zastępując parametry REPO_ROOTCLANG_VERSION wartościami określonymi podczas konfiguracji serwera:
        # 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. Skonfiguruj klienta ASfP DAP:

    1. Wróć do konfiguracji uruchamiania i debugowania protokołu adaptera debugowania w ASfP.
    2. Kliknij kartę Konfiguracja.
    3. Ustaw Tryb debugowania na Dołącz.
    4. W polu Adres ustaw localhost.
    5. Ustaw Port na 1234.
    6. Wklej dane wyjściowe JSON z polecenia lldbclient.py (krok 2) w polu Parametry DAP (JSON).
  5. Aby rozpocząć sesję debugowania, kliknij Debuguj.

Rozwiązywanie problemów

  • Jeśli zobaczysz błąd error: Connection shut down by remote side while waiting for reply to initial handshake packet, zakończ bieżącą sesję debugowania i uruchom ponownie lldb-server na urządzeniu oraz adapter CodeLLDB na hoście.