Android Native调试--lldb on Vscode

作者 by adtxl / 2022-11-17 / 暂无评论 / 86 个足迹

1.介绍

LLDB 已成替代 GDB 的 Android 主推调试工具,本身是命令行调试工具,在对照代码使用时界面查看不是很方便,虽然也有类似 voltron 这样的调试前端工具,但配置起来不是那么方便;虽然 Android Studio 也已经集成 LLDB,但 Android Studio 安装不方便。所以,通过 VSCode + 插件的方式成为一个比较简单的方式。

2. VSCode 安装 CodeLLDB 插件

CodeLLDB 插件安装时会自带 LLDB 程序

3. VSCode 配置

任意创建一个工程,然后添加如下 3 个文件

{
    "lldb.dbgconfig": {
        "product": "xxx",
        "codebase": "${env:HOME}/xxx/android12",
        "symbol": "${dbgconfig:codebase}/out/target/product/${dbgconfig:product}/symbols",
        "port": "5039",
        "pid": "1871",
    },
    "lldb.launch.cwd": "${dbgconfig:codebase}",
    "lldb.launch.relativePathBase": "${dbgconfig:codebase}",
}

需要本地化修改的内容都在这个 settings.json 文件中:

字段 内容
product 填写需要调试的 Android product
codebase 填写实际的代码根目录
port 填写同平台上 lldb-server 通信的 socket 端口,没有特别需求可以用 5039
pid 填写平台上需要调试的进程 pid

tasks.json文件:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "forward_task",
            "type": "shell",
            "command": "adb forward tcp:${config:lldb.dbgconfig.port} tcp:${config:lldb.dbgconfig.port}",
        }
    ]
}

launch.json:文件

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "attach",
            "name": "lldb attach",
            "preLaunchTask": "forward_task",
            "initCommands": [
                "platform select remote-android",
                "settings append target.exec-search-paths ${dbgconfig:symbol}/system/lib ${dbgconfig:symbol}/system/lib/hw ${dbgconfig:symbol}/system/lib/ssl/engines ${dbgconfig:symbol}/system/lib/drm ${dbgconfig:symbol}/system/lib/egl ${dbgconfig:symbol}/system/lib/soundfx ${dbgconfig:symbol}/vendor/lib/ ${dbgconfig:symbol}/vendor/lib/hw ${dbgconfig:symbol}/vendor/lib/egl ${dbgconfig:symbol}/apex/com.android.runtime/bin",
                "platform connect connect://localhost:${dbgconfig:port}",
                "settings set target.inherit-env false"
            ],
            "pid": "${dbgconfig:pid}",
            "stopOnEntry": true,
        },
    ]
}

4. 调试

push lldb-server 到板子的 /system/bin 目录
lldb-server 路径在源码中的 prebuilts/clang/host/linux-x86/clang-r416183b1/runtimes_ndk_cxx/arm/lldb-server

在板子上运行 lldb-server
这里的 5039 端口需要跟上面 VSCode settings.json 中 port 一致

$ lldb-server platform --server --listen "*:5039"
  • lldb attach

image.png

点击上图红框内 lldb attach 左边按钮之后即可开始 Debug

独特见解