You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置VSCode的launch.json远程调试AOSP原生C++代码

解决VSCode集成gdbclient调试AOSP原生C++代码的配置问题

看起来你已经打通了手动调试的流程,接下来把这套流程搬到VSCode里只需要调整launch.json和补充tasks.json的配置就行,我来一步步帮你搞定:

1. 修正launch.json里的核心字段

你之前的配置有两个关键问题需要调整:

program字段:指定本地带调试符号的可执行文件

设备上/system/bin/myProgram是经过剥离(stripped)的,没有调试符号,VSCode需要本地编译生成的未剥离版本来加载调试信息。路径一般是AOSP源码目录下的:

${workspaceFolder}/out/target/product/[你的设备型号]/system/bin/myProgram

比如你的设备是aosp_arm64,那路径就是${workspaceFolder}/out/target/product/aosp_arm64/system/bin/myProgram,可以用file命令确认文件是否带调试符号(输出显示not stripped就对了)。

miDebuggerPath和调试参数

gdbclient是AOSP自带的封装脚本,需要指定它在你本地源码中的实际路径,比如x86_64主机的路径通常是:

${workspaceFolder}/prebuilts/gdb/linux-x86_64/bin/gdbclient

另外,原来的miDebuggerServerAddress可以去掉,换成miDebuggerArgs来传递端口参数给gdbclient——因为gdbclient会自动处理adb端口转发和gdb连接逻辑,不用手动配置服务器地址。

2. 配置preLaunchTask自动启动gdbserver

为了不用每次手动敲adb shell gdbserver :5039 /system/bin/myProgram,我们可以在.vscode/tasks.json里定义一个前置任务:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "init_gdbclient",
            "type": "shell",
            "command": "adb shell gdbserver :5039 /system/bin/myProgram",
            "isBackground": true,
            "problemMatcher": {
                "pattern": { "regexp": "." },
                "background": {
                    "activeOnStart": true,
                    "beginsPattern": ".*Listening on port 5039.*",
                    "endsPattern": ".*"
                }
            }
        }
    ]
}

这个任务会在调试启动前自动执行gdbserver命令,isBackground设为true是因为gdbserver会持续运行,problemMatcher用来判断任务是否就绪——当输出Listening on port 5039时,就认为gdbserver已经准备好等待连接了。

3. 完整的launch.json配置

把上面的内容整合起来,最终的.vscode/launch.json应该是这样:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdbclient) AOSP Native Debug",
            "type": "cppdbg",
            "request": "attach",
            "program": "${workspaceFolder}/out/target/product/your_device_model/system/bin/myProgram",
            "MIMode": "gdb",
            "preLaunchTask": "init_gdbclient",
            "miDebuggerPath": "${workspaceFolder}/prebuilts/gdb/linux-x86_64/bin/gdbclient",
            "miDebuggerArgs": "5039",
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false
        }
    ]
}

关键细节提醒:

  • 替换your_device_model为你实际的设备型号(比如aosp_arm、pixel4等)
  • 确认miDebuggerPath的路径和你主机架构匹配(32位主机用linux-x86,64位用linux-x86_64)
  • 确保设备已经root或者gdbserver有足够权限运行(系统程序可能需要root权限才能调试)
  • 调试前先确认adb devices能看到你的设备,避免连接失败

现在点击VSCode的调试按钮,应该就能自动启动gdbserver并通过gdbclient连接,享受可视化调试的便捷啦!

内容的提问来源于stack exchange,提问作者Potomane555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:14:39