如何配置VSCode的launch.json远程调试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

