На этой странице подробно описано использование LLDB или GDB для разработки ОС. Сведения о разработке приложений см. в разделе Отладка приложения , в котором объясняется, как использовать графический интерфейс Android Studio (на основе LLDB).
GDB устарел и скоро будет удален. Если вы переходите с GDB на LLDB, вам, вероятно, следует начать с чтения LLDB Tutorial . Если вы являетесь опытным пользователем 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:
- Перейдите в « Настройки»> «Параметры разработчика»> «Выбрать приложение отладки» и выберите свое приложение из списка, затем нажмите «Ждать отладчика» .
- Запустите приложение либо из панели запуска, либо с помощью командной строки для запуска:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Подождите, пока приложение загрузится и появится диалоговое окно, сообщающее, что приложение ожидает отладчика.
- Подключите
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 Marshmallow и более
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 Code . Вы можете использовать внешний интерфейс отладчика VS Code вместо интерфейса командной строки LLDB для управления и отладки машинного кода, работающего на устройствах.
Прежде чем использовать VS Code для отладки, установите расширение CodeLLDB .
Для отладки кода с помощью VS Code:
- Убедитесь, что присутствуют все артефакты сборки (например, символы), необходимые для запуска
gdbclient.py
илиlldbclient.py
. - Выполните следующую команду:
lldbclient.py --setup-forwarding vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
Это напечатает объект JSON, и
lldbclient.py
продолжит работу. Это ожидаемо; не убивайте программуlldbclient.py
.Флаг
-r
должен быть последним флагом, если он присутствует, из-за того, как инструмент анализирует флаги. - На вкладке отладки в VS Code выберите добавить конфигурацию , затем выберите LLDB: Custom Launch . Это открывает файл
launch.json
и добавляет в список новый объект JSON. - Удалите только что добавленную конфигурацию отладчика.
- Скопируйте объект JSON, напечатанный
lldbclient.py
, и вставьте его в только что удаленный объект. Сохраните изменения. - Чтобы перезагрузить окно и обновить список отладчика, нажмите Ctrl+Shift+P и введите
reload window
. - Выберите новую конфигурацию отладчика и нажмите « Выполнить ». Отладчик должен подключиться через 10–30 секунд.
- Когда вы закончите отладку, перейдите к терминалу, на котором запущен
lldbclient.py
и нажмите Enter , чтобы завершить программуlldbclient.py
.