Android Studio for Platform (ASfP) 提供了一个强大的调试程序,可让您:
- 选择要调试的设备。
- 在 Java、Kotlin、C/C++ 和 Rust 代码中设置断点。
- 在运行时检查变量和对表达式求值。
在使用调试器之前,您必须将 build 刷写到设备或模拟器。
应用进程 (Java/Kotlin) 调试
如需调试 Java 或 Kotlin 应用进程,请执行以下操作:
在 ASfP 中设置 Java 或 Kotlin 代码中的断点。
从菜单中依次选择 Run > Attach Debugger to Android Process。
在 Choose Process 对话框中,确保将调试类型设置为 Java Only。
从列表中选择您的设备。
选择要调试的特定应用进程。
点击确定。
与设备上的应用互动,以触发断点。
系统进程 (C/C++) 调试
如需调试使用 C 或 C++ 编写的系统进程,请执行以下操作:
验证您是否只运行了一个设备或模拟器。
打开终端,然后从 AOSP 代码库根目录运行
adb root:bash adb root
在 ASfP 中设置 C/C++ 代码断点。
从菜单中依次选择 Run > Attach Debugger to Android Process。
在 Choose Process 对话框中,将调试类型更改为 Native Only 或 Dual (Java + Native)。
勾选 Show all processes 复选框以查看系统进程。
从列表中选择您的设备。
选择要调试的特定系统进程(例如
surfaceflinger或system_server)。点击确定。
与设备互动以命中您的断点。
Rust 调试
ASfP 支持使用 LLDB 通过调试适配器协议 (DAP) 进行 Rust 调试。 本部分概述了如何将 CodeLLDB 设置为调试适配器服务器,以及如何在主机和 Android 设备上调试 Rust 代码。
将 CodeLLDB 设置为调试适配器服务器
创建新的 Debug Adapter Protocol 运行/调试配置:
- 从菜单中依次选择 Run > Edit Configurations。
- 点击 + 按钮。
- 选择 Debug Adapter Protocol。
在服务器标签页中,点击创建新服务器。
在新打开的对话框中,点击 Choose template,然后从列表中选择 CodeLLDB。
选择 CodeLLDB 模板后,系统会添加具有预定义配置的新服务器。
- 在轨迹下拉菜单中选择详细,以启用详细轨迹记录。
- 添加一个环境变量,用于指定 Android 源代码预构建中的
lldb-server的路径:
LLDB_DEBUGSERVER_PATH=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/runtimes_ndk_cxx/x86_64/lldb-server ``` Replace `REPO_ROOT` with the absolute path to your Android source checkout. To find `CLANG_VERSION`, run the `get_clang_version.py` script from the root of your Android source tree: ```bash ./build/soong/scripts/get_clang_version.py- 请勿更改
<<insert base directory>>部分。
在主机上调试 Rust 二进制文件
- 在调试适配器协议运行/调试配置中,打开配置标签页。
- 选择启动作为调试模式。
- 更新工作目录,然后选择要调试的二进制文件。
- 点击确定以保存配置。
- 点击配置旁边的调试图标,启动调试会话。
首次运行此命令时,CodeLLDB 会下载。您应该会在控制台中看到 DAP 轨迹。在 Rust 代码中设置的断点应按预期命中。
在 Android 设备上调试 Rust 二进制文件(附加模式)
查找 PID:在 Android 设备上找到要调试的应用的进程 ID (PID)。
在设备上启动 lldb-server:从 Android 源代码树检出的根目录运行
lldbclient.py脚本,并将<PID>替换为进程 ID:lldbclient.py --setup-forwarding vscode-lldb -p <PID>此脚本会将正确的
lldb-server推送到设备,启动该lldb-server,设置端口转发(主机端口 5039 到设备),并输出后续步骤所需的 DAP JSON 配置。保持此终端处于打开状态。在主机上启动 CodeLLDB 调试适配器:
- 前往 CodeLLDB 扩展程序目录(默认:
~/.lsp4ij/dap/codelldb/extension/adapter)。 - 设置所需的环境变量并启动适配器服务器,注意将
REPO_ROOT和CLANG_VERSION替换为在服务器设置中确定的值:
# Sets PYTHONHOME env variable export PYTHONHOME=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3 # Tell the dynamic linker where to find python libs export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3/lib # Starts the CodeLLDB Debugger Adapter server on port 1234 ./codelldb --liblldb REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/lib/liblldb.so --port 1234- 前往 CodeLLDB 扩展程序目录(默认:
配置 ASfP DAP 客户端:
- 返回 ASfP 中的调试适配器协议运行/调试配置。
- 选择配置标签页。
- 将调试模式设置为附加。
- 将地址设置为
localhost。 - 将端口设置为
1234。 - 将
lldbclient.py命令(第 2 步)的 JSON 输出粘贴到 DAP parameters (JSON) 字段中。
点击 Debug 以启动调试会话。
问题排查
- 如果您看到错误
error: Connection shut down by remote side while waiting for reply to initial handshake packet,请终止当前调试会话,然后重新启动设备上的lldb-server和主机上的 CodeLLDB 适配器。