На этой странице рассказывается, как использовать LLDB для разработки ОС. Если вы разрабатываете приложение, прочитайте статью Отладка приложения. В ней рассказывается, как использовать графический интерфейс Android Studio (на основе LLDB).
GDB больше не поддерживается и не предоставляется. Если вы переходите с GDB на LLDB, рекомендуем начать с руководства по LLDB. Если вы опытный пользователь GDB, вам будет полезна карта команд GDB для LLDB.
Требования
Чтобы использовать отладчик, выполните следующие действия:
- Настройте среду сборки с помощью обычной команды
envsetup.sh. - Выполните ту же команду
lunch, которую использовали при сборке. Обратите внимание, что элемент lunch должен точно соответствовать устройству, которое вы отлаживаете. Если элемент обеда не соответствует прикрепленному устройству, вы получите ошибку следующего вида:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc) - Подключите устройство к машине.
Подробнее о том, как настроить среду…
Отладка двоичного файла
Чтобы отладить двоичный файл, созданный на вашем компьютере, сначала скопируйте его на устройство, а затем запустите отладчик. Пример:
adb push test.exe /data/local/tmp/test.exelldbclient.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 приостанавливал аварийно завершенные процессы, чтобы вы могли подключить отладчик, задайте соответствующее свойство:
- После 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, показывающие, как подключить отладчик к процессу, в котором произошел сбой.
Отладка с помощью VS Code
LLDB поддерживает отладку кода платформы в Visual Studio Code. Вы можете использовать интерфейс отладчика VS Code вместо интерфейса командной строки 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должен быть последним, поскольку инструмент обрабатывает флаги в определенном порядке. - Откройте боковую панель Run and Debug (Запуск и отладка). Новая конфигурация должна появиться в списке отладчика. Нажмите Начать отладку (F5). Отладчик должен подключиться через 10–30 секунд.
Если новая конфигурация не появилась в представлении "Запуск и отладка", перезагрузите окно, чтобы обновить список отладчиков. Для этого нажмите Ctrl + Shift + P и введите
reload window. - Закончив отладку, перейдите в терминал, в котором выполняется команда
lldbclient.py, и нажмите клавишу Ввод, чтобы завершить программуlldbclient.py. При последующих запусках скрипта конфигурация будет генерироваться между комментариями#lldbclient-generatedи заменять старое содержимое. Удалять комментарии вручную не нужно.
Чтобы добавить дополнительные параметры в сгенерированную конфигурацию запуска, можно использовать флаг --vscode-launch-props. Пример:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...Build перед отладкой и добавит новый шаг инициализации отладки к шагам, сгенерированным скриптом. Обзор доступных свойств можно найти в
документации по VS Code и руководстве пользователя
расширения CodeLLDB.