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

Android Studio for Platform (ASfP) интегрирует многоязыковую отладку платформы вокруг вкладки Attach (Подключить) в окне инструмента Debug (Отладка):

  • Выберите Run > Attach to Android Process (Выполнить > Подключиться к процессу Android) (Control+Alt+A), чтобы подключить отладчик Java, отладчик машинного кода (встроенный LLDB) или оба отладчика к любому запущенному приложению или системному процессу на физическом устройстве или виртуальном устройстве Cuttlefish.
  • Проверьте каждую загруженную общую библиотеку (.so) и ее восьмисимвольный идентификатор сборки ELF в панели Библиотеки перед подключением. Значки с галочками подтверждают соответствие локальных символов отладки в разделе out/target/product/<device>/symbols.
  • Управляйте предварительными условиями для устройства с помощью панели инструментов: отфильтруйте результаты с помощью Показать системные процессы, нажмите Устройство с root-доступом, чтобы запустить adb root (при этом будет отображаться Устройство с root-доступом), и нажмите Включить JDWP, чтобы включить JDWP в сборках userdebug.
  • Устанавливайте условные точки останова и точки останова исключений, просматривайте встроенные значения переменных в редакторе, используйте пропуск кадра и умный шаг с заходом, а также проверяйте структурированные типы C++ и Rust во время выполнения.

Перед использованием отладчика создайте целевой объект lunch, чтобы существовал локальный индекс символов out/target/product/<device>/symbols/.build-id, и прошейте или запустите соответствующий образ устройства.

Отладка кода на Java и на Java и нативном языках

Чтобы отладить приложение на Java или Kotlin, системное приложение (например, com.android.messaging, "Настройки" или SystemUI) или процесс, вызывающий код JNI, C++ или Rust, выполните следующие действия:

  1. Установите точки останова в исходных файлах Java, Kotlin, C, C++ или Rust.
  2. Выберите Run > Attach to Android Process (Выполнить > Подключиться к процессу Android) (Control+Alt+A). ASfP откроет закрепленную вкладку Attach (Прикрепить) в окне инструмента Debug (Отладка).
  3. Выберите целевое устройство в раскрывающемся меню. Если JDWP не включен в сборке userdebug, нажмите Enable JDWP (Включить JDWP). ASfP установит persist.debug.dalvik.vm.jdwp.enabled=1 и перезагрузит устройство. Если кнопка активна, на ней написано JDWP enabled (JDWP включен), а при нажатии правой кнопкой мыши появляется действие Disable JDWP (Отключить JDWP).
  4. Выберите целевой процесс в таблице (процессы Java и ART отмечены значком чашки кофе).
  5. В нижней части вкладки Присоединить выберите Отладчик Java, Отладчик Native или оба варианта. Если выбрать оба варианта, в окне инструментов Отладка откроются две связанные вкладки: <process> (<pid>) для встроенного отладчика LLDB и <process> (<pid>)-jdwp для Java. Их жизненные циклы связаны, поэтому при остановке одного сеанса останавливаются оба.
  6. Нажмите Присоединить и взаимодействуйте с приложением на устройстве, чтобы достичь точек останова.

Две вкладки отладки (Java и нативная), связанные с вкладкой &quot;Подключить&quot;

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

Чтобы отладить системные демоны, HAL или системные сервисы (например, android.hardware.bluetooth-service.cuttlefish, surfaceflinger или audioserver), выполните следующие действия:

  1. Откройте Run > Attach to Android Process (Выполнить > Подключиться к процессу Android) (Control+Alt+A). Если на панели инструментов отображается Root Device (Устройство с настроенным root-доступом), нажмите на нее, чтобы ASfP запустил adb root и показал Device is rooted (Устройство с настроенным root-доступом).
  2. На верхней панели инструментов выберите Показать системные процессы и отфильтруйте нужный процесс.
  3. Проверьте локальные символы отладки на панели "Библиотеки". При выборе процесса таблица Библиотеки заполняется всеми общими библиотеками ELF (.so), загруженными в процесс, и первыми восемью шестнадцатеричными символами идентификатора сборки ELF. ASfP сопоставляет каждый идентификатор сборки с out/target/product/<device>/symbols (symbols/.build-id требуется для разрешения библиотек внутри APEX):
    • У проверенных библиотек есть значок с галочкой. Наведите указатель на любую строку с разрешенным конфликтом, чтобы посмотреть полный локальный путь к символу .debug.
    • Для неразрешенных библиотек без соответствующих локальных символов отображается значок предупреждения.
  4. Обнаружение процессов, не связанных с Java. Если вы выберете процесс C++ или Rust (отмечен значком шестиугольника C), ASfP скроет отладчик Java и покажет сообщение Отладка Java недоступна, так как это не процесс Java, оставив флажок Нативный отладчик установленным.
  5. Установите точки останова в исходных файлах C, C++ или Rust, нажмите Присоединить и запустите путь выполнения на устройстве.

Вкладка &quot;Прикрепить&quot; с таблицей библиотек, идентификаторами сборки ELF и флажками локальных символов

Отладка кода Rust

ASfP отлаживает код платформы Rust с помощью того же встроенного отладчика LLDB, который используется для C и C++. Внешний адаптер или настройка сервера вручную не требуются: ASfP использует lldb-dap из своего встроенного набора инструментов и автоматически загружает Rust pretty-printers из предварительно созданных файлов AOSP, чтобы стандартные типы, такие как String, Vec, HashMap и Option, отображали структурированные значения на панели Variables (Переменные).

Как подключиться к запущенному процессу Rust на устройстве

Выполните инструкции из раздела Отладка системного процесса (C и C++): откройте Run > Attach to Android Process (Выполнить > Подключиться к процессу Android), убедитесь, что Device is rooted (Устройство с правами root) и локальные символы отмечены флажком на панели Libraries (Библиотеки), оставьте флажок Native debugger (Встроенный отладчик) установленным и нажмите Attach (Подключиться). Фреймы стека Rust и C или C++ отображаются вместе в одном сеансе отладки.

Как отлаживать модуль rust_test или rust_test_host

  1. Откройте файл Android.bp, в котором объявлена цель rust_test или rust_test_host, и нажмите на значок Выполнить на полях рядом с типом модуля.
  2. Выберите Debug '<ModuleName>' (Отладка <ModuleName>). ASfP создаст целевой объект, запустит двоичный файл теста в LLDB на хост-машине или подключенном устройстве и приостановит выполнение на точках останова Rust.
  3. Чтобы отладить отдельную функцию тестирования или настроить команды запуска LLDB, откройте Run > Edit Configurations (Запустить > Изменить конфигурации), выберите сгенерированную конфигурацию Soong Test (Тест Soong) и задайте Method (Метод) или разверните параметры Debugger (Отладчик). Подробнее о параметрах конфигурации Soong Test рассказывается в статье Как тестировать код платформы с помощью atest.

Отладка кода платформы Rust с помощью структурированных визуализаторов переменных в ASfP