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
点击上图红框内 lldb attach 左边按钮之后即可开始 Debug
评论