使用 ADB + VSCode 远程调试 ARM 开发板(T113-S3)gdbserver 全流程实战

889 阅读3分钟

本文以全志 T113-S3平台为例,适用于大部分支持 adb 的 ARM/Linux 开发板,重点讲述如何用 ADB 转发、VSCode 图形化结合 GDB/gdbserver 进行高效源码级调试,彻底告别慢吞吞的串口调试体验!


目录

  1. 准备环境
  2. 交叉编译带符号的可执行文件
  3. 开发板推送和启动 gdbserver
  4. 主机端 adb 端口转发
  5. VSCode 调试配置(launch.json)
  6. 调试实战体验
  7. 常见问题汇总
  8. 总结和经验

准备环境

  • 开发板: 已烧写 Tina/OpenWrt/Linux,且能通过 USB 连接 adb
  • 主机(推荐 Ubuntu 20.04/22.04/24.04):
    • 安装好 VSCode
    • 安装微软官方 C/C++ 插件(ms-vscode.cpptools
    • 安装 gdb-multiarch(支持多架构调试):
sudo apt update
sudo apt install gdb-multiarch adb
  • 编译工具链: arm-none-linux-gnueabihf-gcc 或平台自带交叉工具链

交叉编译带符号的可执行文件

调试体验的关键——务必使用 -O0 -g 编译选项!

arm-none-linux-gnueabihf-gcc -O0 -g main.c -o your_app
  • -O0:不开优化,源码单步最精确
  • -g :包含调试符号,可被 GDB/VSCode 完全识别

切记不要 strip,也不要只用 bin 文件!


开发板推送和启动 gdbserver(或者编译openwrt时勾选gdbserver)

  1. 推送 gdbserver 和可执行文件:
adb push gdbserver /data/local/tmp/
adb push your_app /data/local/tmp/
  1. adb shell 启动 gdbserver(也可通过串口终端启动gdbserver)
adb shell
cd /data/local/tmp
chmod +x gdbserver your_app
./gdbserver :1234 /your_app
    • :1234 表示监听开发板本地 1234 端口

主机端 adb 端口转发

在主机执行:

adb forward tcp:1234 tcp:1234
  • 意思是:主机 localhost:1234 <> 通过 adb 通道 <> 开发板 1234 端口

VSCode 调试配置(launch.json)

在你的工程下新建 .vscode/launch.json,内容如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "GDB adb端口调试",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/demo_app/lv_port_linux-release-v8.3/Electrical_Muscle_Stimulation",
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "miDebuggerPath": "/usr/bin/gdb-multiarch",
            "miDebuggerServerAddress": "localhost:1234",
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "启用自动反汇编",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}
  • 路径需按实际项目调整

调试实战体验

  1. 先 adb shell 到开发板, ./gdbserver :1234 ./your_app
  2. 主机执行 adb forward tcp:1234 tcp:1234
  3. VSCode F5 启动调试
  4. 在源码中打断点,单步、变量、堆栈、内存、调用栈,全功能源码级调试
  5. 体验和本地 Linux 下无差别

常见问题汇总

1. 端口连接失败?

  • 没有执行 adb forward,或者 gdbserver 没启动
  • 解决:主机执行 adb forward,开发板用 adb shell 正确启动 gdbserver

2. step/next 直接全速运行?

  • 编译没加 -O0 -g 或 ELF 不对
  • 解决:确认 Makefile/编译命令用 -O0 -g,并用 file 命令检查

3. VSCode 无法识别 cppdbg 类型?

  • 没装官方 C/C++ 插件
  • 解决:扩展市场安装 “C/C++ (ms-vscode.cpptools)”

4. 主机用串口调试体验太差?

  • 强烈推荐用 adb,体验比串口高几个量级

总结和经验

  • 用 adb + VSCode + gdbserver 调试 ARM/Linux 嵌入式开发板,是目前调试效率最高的方案之一!
  • 避免物理串口带来的卡顿和各种协议兼容问题
  • 只需 USB 连 adb,端口转发,配合 VSCode 图形化,源码断点、单步、变量、堆栈、内存都可以轻松完成
  • 记得 ELF 必须 -O0 -g,主机和板子的 ELF、gdbserver 版本要对应
  • 每次重插开发板/重启主机都要重新执行一次 adb forward tcp:xxxx tcp:xxxx

附录:高效调试小技巧

  • 可在 VSCode 里快速切换断点、条件断点、变量监视
  • 支持多端口转发,调试多个进程(adb forward tcp:1235 tcp:1235 等)
  • launch.json 里 "stopAtEntry": true 可直接在 main 停住

有任何调试环境配置/VSCode疑难杂症,欢迎评论区交流!
如需脚本自动化全流程、适配特殊板卡,也可私信/留言讨论。