На этой странице подробно описано использование 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.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 приостанавливал аварийные процессы, чтобы вы могли подключить отладчик, установите соответствующее свойство:
- После Андроид 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"}' \
...Build перед отладкой и добавлять новый шаг инициализации отладки к шагам, сгенерированным сценарием. Обзор доступных свойств вы можете найти в документации VS Code и в Руководстве пользователя расширения CodeLLDB .