Отладка кода платформы

Android Studio for Platform (ASfP) предоставляет мощный отладчик, который позволяет:

  • Выберите устройство для отладки.
  • Установите точки останова в своем коде на Java, Kotlin, C/C++ и Rust.
  • Проверяйте переменные и оценивайте выражения во время выполнения программы.

Перед использованием отладчика необходимо прошить собранную программу на устройство или эмулятор.

Отладка процессов приложения (Java/Kotlin)

Для отладки процесса Java- или Kotlin-приложения:

  1. Установите точки останова в вашем коде на Java или Kotlin с помощью ASfP.

  2. Выберите в меню пункт «Выполнить» > «Подключить отладчик к процессу Android» .

  3. В диалоговом окне «Выбор процесса» убедитесь, что для типа отладки установлено значение «Только Java» .

  4. Выберите своё устройство из списка.

  5. Выберите конкретный процесс приложения, который вы хотите отладить.

  6. Нажмите ОК .

  7. Взаимодействуйте с приложением на вашем устройстве, чтобы достичь контрольных точек.

Отладка системных процессов (C/C++)

Для отладки системного процесса, написанного на C или C++:

  1. Убедитесь, что у вас запущено только одно устройство или эмулятор.

  2. Откройте терминал и запустите adb root из корневой директории вашей копии AOSP: bash adb root

  1. Установите точки останова в вашем коде на C/C++ с помощью ASfP.

  2. Выберите в меню пункт «Выполнить» > «Подключить отладчик к процессу Android» .

  3. В диалоговом окне «Выбор процесса» измените тип отладки на «Только нативная отладка» или «Двойная (Java + нативная)» .

  4. Установите флажок «Показать все процессы» , чтобы увидеть системные процессы.

  5. Выберите своё устройство из списка.

  6. Выберите конкретный системный процесс, который вы хотите отладить (например, surfaceflinger или system_server ).

  7. Нажмите ОК .

  8. Взаимодействуйте с устройством, чтобы достичь контрольных точек.

отладка Rust

ASfP поддерживает отладку Rust с использованием протокола отладочного адаптера (DAP) с LLDB. В этом разделе описано, как настроить CodeLLDB в качестве сервера отладочного адаптера и отлаживать код Rust на хосте и на устройстве Android.

Настройте CodeLLDB в качестве сервера отладочного адаптера.

  1. Создайте новую конфигурацию запуска/отладки протокола отладочного адаптера :

    1. Выберите в меню «Выполнить» > «Изменить настройки» .
    2. Нажмите кнопку «+» .
    3. Выберите протокол отладочного адаптера .
  2. На вкладке «Сервер» нажмите «Создать новый сервер» .

  3. В открывшемся диалоговом окне нажмите «Выбрать шаблон» и выберите CodeLLDB из списка.

  4. После выбора шаблона CodeLLDB новый сервер добавляется с предопределенной конфигурацией.

    1. Включите подробную трассировку, выбрав пункт «Подробная трассировка» в раскрывающемся списке «Трассировка» .
    2. Добавьте переменную среды, указывающую путь к lldb-server в предварительно собранных исходных файлах Android:
        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. Не изменяйте раздел <<insert base directory>> .

Отладка бинарных файлов Rust на хосте

  1. Откройте вкладку «Конфигурация» в настройках запуска/отладки протокола отладчика.
  2. Выберите «Запуск» в качестве режима отладки .
  3. Обновите рабочий каталог и выберите двоичный файл, который хотите отладить.
  4. Нажмите ОК , чтобы сохранить конфигурацию.
  5. Чтобы начать отладку, нажмите на значок «Отладка» рядом с файлом конфигурации.

При первом запуске CodeLLDB загрузится. В консоли должны отобразиться трассировки DAP. Точки останова, установленные в вашем коде Rust, должны срабатывать, как и ожидалось.

Отладка бинарных файлов Rust на устройстве Android (режим подключения).

  1. Найдите PID: Определите идентификатор процесса (PID) приложения, которое вы хотите отлаживать на устройстве Android.

  2. Запустите lldb-server на устройстве: из корневой папки вашей папки с исходным кодом Android запустите скрипт lldbclient.py , заменив <PID> на идентификатор процесса:

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

    Этот скрипт отправляет на устройство необходимый lldb-server , запускает его, настраивает переадресацию портов (порт хоста 5039 на устройство) и выводит конфигурацию DAP в формате JSON, необходимую для следующих шагов. Держите этот терминал открытым.

  3. Запустите отладочный адаптер CodeLLDB на хосте:

    • Перейдите в каталог расширений CodeLLDB (по умолчанию: ~/.lsp4ij/dap/codelldb/extension/adapter ).
    • Установите необходимые переменные среды и запустите сервер адаптера, заменив значения REPO_ROOT и CLANG_VERSION определенные в настройках сервера:
        # 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:

    1. Вернитесь к настройкам запуска/отладки протокола отладчика в ASfP.
    2. Выберите вкладку «Конфигурация» .
    3. Установите режим отладки на «Подключить» .
    4. Установите адрес на localhost .
    5. Установите порт на 1234 .
    6. Вставьте JSON-вывод команды lldbclient.py (шаг 2) в поле «Параметры DAP (JSON)» .
  5. Нажмите кнопку «Отладка» , чтобы начать сеанс отладки.

Поиск неисправностей

  • Если вы видите error: Connection shut down by remote side while waiting for reply to initial handshake packet , завершите текущую сессию отладки и перезапустите lldb-server на устройстве и адаптер CodeLLDB на хосте.