На этой странице подробно описано использование LLDB для разработки ОС. Подробнее о разработке приложений см. в разделе Отладка приложения , где объясняется, как использовать графический интерфейс Android Studio (на основе LLDB).
GDB больше не поддерживается и не предоставляется. Если вы переходите с GDB на LLDB, вам, вероятно, следует начать с чтения Учебного пособия по LLDB . Если вы опытный пользователь GDB, карта команд GDB в LLDB будет очень полезна при переходе.
Предварительные условия
Чтобы использовать отладчик:
- Настройте среду сборки с помощью обычной команды
envsetup.sh
. - Запустите ту же команду
lunch
, которую вы использовали при сборке. Обратите внимание, что элемент обеда должен точно соответствовать устройству, которое вы отлаживаете. Если элемент обеда не соответствует подключенному устройству, вы получите сообщение об ошибке вида:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Подключите ваше устройство к машине.
Дополнительную помощь по настройке среды см. в разделе Настройка среды .
Отладка двоичного файла
Чтобы отладить двоичный файл, созданный на вашем компьютере, сначала вам придется скопировать двоичный файл на устройство, а затем запустить отладчик. Например:
adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe
Отладка запущенных приложений или процессов
Чтобы подключиться к работающему приложению или собственному демону, используйте lldbclient.py
с PID. Например, чтобы отладить процесс с PID 1234, запустите это на хосте:
lldbclient.py -p 1234
Скрипт настраивает переадресацию портов, запускает соответствующую заглушку удаленной отладки на устройстве, запускает отладчик на хосте, настраивает его на поиск символов и подключает к заглушке удаленной отладки.
Отладка запуска собственного процесса
Для отладки процесса при его запуске используйте lldbclient.py
с опцией -r
. Например, для отладки ls /bin
запустите это на хосте:
lldbclient.py -r /system/bin/ls /bin
Затем введите continue
в командной строке отладчика.
Отладка запуска приложения
Иногда вам нужно отладить приложение при его запуске, например, когда произошел сбой, и вы хотите выполнить пошаговый код, чтобы увидеть, что произошло до сбоя. В некоторых случаях прикрепление работает, но в других случаях невозможно, поскольку приложение аварийно завершает работу до того, как вы сможете его прикрепить. Подход logwrapper
(используемый для strace
) не всегда работает, поскольку у приложения может не быть разрешений на открытие порта, а lldbserver
наследует это ограничение.
Чтобы отладить запуск приложения, используйте параметры разработчика в настройках, чтобы указать приложению дождаться подключения отладчика Java:
- Откройте «Настройки» > «Параметры разработчика» > «Выбрать приложение для отладки» и выберите свое приложение из списка, затем нажмите « Подождать отладчика» .
- Запустите приложение либо из панели запуска, либо с помощью командной строки:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Подождите, пока приложение загрузится и появится диалоговое окно, сообщающее, что приложение ожидает отладчика.
- Подключите
lldbserver
/lldbclient
как обычно, установите точки останова, затем продолжите процесс.
Чтобы приложение могло работать, подключите отладчик 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
приостанавливал аварийные процессы, чтобы вы могли подключить отладчик, установите соответствующее свойство:
- После Андроид 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, показывающие, как подключить отладчик к сбойному процессу.
Отладка с помощью VS Code
LLDB поддерживает код платформы отладки в Visual Studio Code . Вы можете использовать интерфейс отладчика VS Code вместо интерфейса CLI LLDB для управления и отладки собственного кода, выполняющегося на устройствах.
Прежде чем использовать VS Code для отладки, установите расширение CodeLLDB .
Чтобы отладить код с помощью VS Code:
- Убедитесь, что все артефакты сборки (например, символы), необходимые для запуска
lldbclient.py
илиlldbclient.py
присутствуют. - В VS Code нажмите Ctrl+Shift+P, чтобы запустить команду, найдите Debug: Add Configuration... , затем выберите LLDB . При этом открывается файл
launch.json
и в список добавляется новый объект JSON. - Замените вновь добавленную конфигурацию отладчика двумя строками комментариев —
// #lldbclient-generated-begin
и// #lldbclient-generated-end
, чтобы ваш список конфигурации выглядел следующим образом:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
использует эти комментарии, чтобы определить, куда писать конфигурацию. Если в списке есть другие элементы, добавьте строки комментариев в конец после других конфигураций. - Запустите следующую команду в терминале, где вы запустили
envsetup.sh
иlunch
:lldbclient.py --setup-forwarding vscode-lldb \ --vscode-launch-file LAUNCH_JSON_PATH \ ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
lldbclient.py
записывает сгенерированную конфигурацию вlaunch.json
и продолжает работу. Это ожидаемо; не уничтожайте программуlldbclient.py
. Если вы опустите--vscode-launch-file
скрипт напечатает фрагмент JSON, который вам нужно будет скопировать и вставить вlaunch.json
вручную.Флаг
-r
должен быть последним, если он присутствует, из-за того, как флаги анализируются инструментом. - Откройте боковую панель «Выполнение и отладка» — новая конфигурация должна появиться в списке отладчика. Нажмите «Начать отладку» (F5) . Отладчик должен подключиться через 10–30 секунд.
Если новая конфигурация не появилась в представлении «Выполнение и отладка», перезагрузите окно, чтобы обновить список отладчика — нажмите Ctrl+Shift+P и введите
reload window
. - Когда вы закончите отладку, перейдите к терминалу, на котором запущен
lldbclient.py
, и нажмите Enter , чтобы завершить программуlldbclient.py
. Последующие запуски сценария будут генерировать конфигурацию между комментариями#lldbclient-generated
и заменять старое содержимое; вам не нужно удалять их вручную.
Чтобы добавить пользовательские свойства в сгенерированную конфигурацию запуска, вы можете использовать флаг --vscode-launch-props
. Например:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
Свойства примера заставят VS Code запускать задачу с именем Build
перед отладкой и добавлять новый шаг инициализации отладки к шагам, созданным сценарием. Обзор доступных свойств вы можете найти в документации VS Code и в Руководстве пользователя расширения CodeLLDB .