Использование отладчиков

Эта страница деталь с помощью LLDB или GDB для разработки ОС. Для разработки приложений, см отлаживать приложение вместо, который объясняет , как использовать Android Studio GUI (на основе LLDB).

GDB устарел и скоро будет удален. Если вы переходите от GDB для LLDB, вероятно , вы должны начать с чтения LLDB Учебник . Если вы являетесь опытным пользователем GDB, то GDB для LLDB команды карта очень полезен при переводе.

Предпосылки

Чтобы использовать отладчик:

  • Настройка среды сборки с обычной envsetup.sh командой.
  • Выполните ту же lunch команду , которую вы использовали при строительстве.

Для получения дополнительной помощи при настройке среды см Набор до среды .

Отладка запущенных приложений или процессов

Для подключения к работающему приложению или нативному демону, используйте gdbclient.py с PID. Например, чтобы отладить процесс с PID 1234, запустите это на хосте:

gdbclient.py -p 1234

Сценарий устанавливает переадресацию портов, запускает соответствующую заглушку удаленной отладки на устройстве, запускает отладчик на хосте, настраивает его для поиска символов и подключает его к заглушке удаленной отладки.

Отладка запуска собственного процесса

Для отладки процесса , как он начинает, использовать gdbclient.py с -r опции. Например, для отладки ls /bin , запустите это на хосте:

gdbclient.py -r /system/bin/ls /bin

Затем введите continue на отладчик подсказки.

Отладка запуска приложения

Иногда вы хотите отладить приложение , как он начинает, например, когда есть сбой , и вы хотите , чтобы пройти через код , чтобы увидеть , что произошло до аварии. Прикрепление работы в некоторых случаях, но в других случаях это невозможно , потому что приложение падает , прежде чем вы можете прикрепить. logwrapper подход (используется для strace ) не всегда работает , потому что приложение может не иметь разрешений на открытие порта и gdbserver наследованного это ограничение.

Чтобы отладить запуск приложения, используйте параметры разработчика в настройках, чтобы указать приложению дождаться подключения отладчика Java:

  1. Перейдите в раздел Настройки> Параметры разработчика> Выбрать приложение отладки и выберите приложение из списка, затем нажмите Ожидать отладчик.
  2. Запустите приложение, либо из пусковой установки или с помощью командной строки для запуска:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. Подождите, пока приложение загрузится, и появится диалоговое окно с сообщением, что приложение ожидает отладчика.
  4. Приложить gdbserver / gdbclient нормально, набор контрольных точек, а затем продолжить процесс.

Чтобы приложение работало, подключите отладчик Java Debug Wire Protocol (JDWP), например Java Debugger (jdb):

adb forward tcp:12345 jdwp:XXX  # (Where XXX is the PID
of the debugged process.)
jdb -attach localhost:12345

Отладка приложений или процессов, которые дают сбой

Если вы хотите debuggerd приостановить врезались процессы таким образом, что вы можете подключить отладчик, установить соответствующее свойство:

  • После того, как Android 11
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 и нижний
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6,0 Зефир и ниже
    adb shell setprop debug.db.uid 999999
    

В конце обычного аварийного выхода, debuggerd обеспечивает копирование и вставку инструкции в LogCat , показывающую , как подключить отладчик разбившегося процесса.

Отладка без символов

Для 32-битного ARM, если у вас нет символов, gdb не может определить , какой набор инструкций он разборка (ARM или Thumb). Чтобы указать набор инструкций, выбранный по умолчанию, когда информация о символе отсутствует, установите следующее свойство:

set arm fallback-mode arm  # or thumb

Отладка с помощью VS Code

LLDB поддерживает отладку кода платформы на Visual Studio кодекса . Вы можете использовать интерфейс отладчика VS Code вместо интерфейса CLI LLDB для управления и отладки собственного кода, выполняемого на устройствах.

Перед использованием VS кода для отладки, установите расширение CodeLLDB .

Для отладки кода с помощью VS Code:

  1. Убедитесь , что все сборки артефактов (например, символы) , необходимые для запуска gdbclient.py или lldbclient.py присутствуют.
  2. Выполните следующую команду:
    lldbclient.py --setup-forwarding
          vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    Это выводит объект JSON и lldbclient.py продолжает работать. Это ожидается; не убивает lldbclient.py программы.

    -r флаг должен быть последним флаг , если он присутствует из - за того , как флаги анализируются с помощью инструмента.

  3. На вкладке отладки в VS кода выберите конфигурацию надстройки, а затем выберите LLDB: Выборочная Launch. Это открывает launch.json файл и добавляет новый объект JSON в список.
  4. Удалите только что добавленную конфигурацию отладчика.
  5. Скопируйте объект JSON выведенный lldbclient.py и вставить его в объект просто удаляется. Сохраните изменения.
  6. Чтобы обновить окно , чтобы обновить список отладчика, нажмите Ctrl + Shift + P и тип reload window .
  7. Выберите новую конфигурацию отладчика и нажмите запустить. Отладчик должен подключиться через 10–30 секунд.
  8. Когда вы закончите отладку, перейдите к терминальному беговой lldbclient.py и нажмите Enter , чтобы закончить lldbclient.py программу.