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

如何调用gdbserver且不自动运行程序?BeagleBone Black远程调试

用GDB + GDBserver 调试BeagleBone Black上的崩溃进程

一、在BeagleBone Black上启动gdbserver

分两种场景操作,对应进程未启动和已崩溃挂起的情况:

场景1:从头启动待调试进程

如果进程还未运行,直接在BeagleBone Black终端执行:

# 以监听2345端口为例,可自定义端口;替换./crash_app为你的目标可执行文件
gdbserver :2345 ./crash_app

若进程需要传入启动参数,直接追加在可执行文件后:

gdbserver :2345 ./crash_app arg1 arg2

场景2:附加到已崩溃/挂起的进程

先通过进程名找到目标进程的PID:

ps aux | grep crash_app

再将gdbserver附加到该进程:

# 替换<PID>为查到的进程ID,端口保持和后续主机端一致
gdbserver :2345 --attach <PID>

启动成功后,gdbserver会输出如下提示,说明已处于监听状态:

Remote debugging using :2345

二、主机端使用GDB连接调试

1. 准备对应架构的交叉GDB

BeagleBone Black为ARM架构,若主机是x86_64架构,需使用ARM交叉编译工具链中的GDB(通常命名为arm-linux-gnueabihf-gdb,具体名称依你的工具链而定)。

2. 启动GDB并加载本地可执行文件

在主机终端运行:

# 加载本地的目标可执行文件,需和BeagleBone Black上的版本完全一致且带调试信息
arm-linux-gnueabihf-gdb ./crash_app

3. 连接到BeagleBone Black的gdbserver

进入GDB交互界面后,执行连接命令:

# 替换<BBB_IP>为BeagleBone Black的实际IP,端口和之前设置的保持一致
target remote <BBB_IP>:2345

4. 常规调试操作

连接成功后,即可像本地调试一样执行操作:

  • 设置断点:break main 或 break filename.c:line_number
  • 启动/恢复进程:从头启动的场景执行continue;附加进程的场景直接操作即可
  • 查看调用栈:bt
  • 查看变量:print <var_name>
  • 单步执行:next/step

关键注意事项

  • 确保主机与BeagleBone Black在同一网络,且目标板的监听端口未被防火墙拦截
  • 本地的可执行文件必须和目标板上的完全一致,且编译时添加了-g参数以包含调试信息,否则断点、变量查看等操作会异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:42:42