尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

GDB 与 GDBServer 远程调试基础命令详解

GDB 与 GDBServer 远程调试基础命令详解
📅 发布时间:2026/6/22 1:04:25

GDB 与 GDBServer 远程调试基础命令详解

 


​一、环境准备​

  1. ​目标机(嵌入式设备)​​

    • 安装 gdbserver(如 arm-linux-gnueabihf-gdbserver)

    • 启动 gdbserver并监听端口:

      bash
      bash
      复制
       
       
      gdbserver :2345 /path/to/program [args]  # 监听本地2345端口,运行程序
    • 若调试已运行进程:

      bash
      bash
      复制
       
       
      gdbserver :2345 --attach <PID>  # 附加到进程ID
  2. ​主机(开发机)​​

    • 安装交叉编译工具链的 GDB(如 arm-linux-gnueabihf-gdb)

    • 启动 GDB 并加载程序:

      bash
      bash
      复制
       
       
      arm-linux-gnueabihf-gdb ./program

​二、连接与调试基础命令​

​命令​

​作用​

​示例​

target remote <IP>:<PORT>

连接到目标机的 GDBServer

(gdb) target remote 192.168.1.100:2345

file <program>

加载可执行文件(需与目标机程序一致)

(gdb) file ./program

list/ l

显示源码(默认显示当前位置前后10行)

(gdb) list main

break <location>

设置断点(函数名、行号、内存地址)

(gdb) break main

run/ r

启动程序执行(带参数可用 set args设置)

(gdb) run arg1 arg2

continue/ c

从断点继续执行至下一个断点或程序结束

(gdb) continue

step/ s

单步执行(进入函数内部)

(gdb) step

next/ n

单步执行(不进入函数)

(gdb) next

print <var>/ p

打印变量值(支持格式控制,如 x十六进制、d十进制)

(gdb) p/x 0x1234

backtrace/ bt

查看调用栈(显示函数调用链)

(gdb) bt

info breakpoints

列出所有断点信息

(gdb) info breakpoints

delete <BP_NUM>

删除指定断点

(gdb) delete 1

finish

继续执行至当前函数返回

(gdb) finish


​三、调试场景示例​

  1. ​设置断点并单步调试​

    bash
    bash
    复制
     
     
    (gdb) break main.c:10    # 在 main.c 第10行设置断点
    (gdb) run                # 启动程序
    (gdb) step               # 进入函数内部
    (gdb) next               # 跳过函数调用
    (gdb) p count            # 打印变量 count 的值
  2. ​查看内存与寄存器​

    • 查看内存内容:

      bash
      bash
      复制
       
       
      (gdb) x/4xw 0x20001000  # 从地址0x20001000读取4个32位字(十六进制)
    • 查看寄存器:

      bash
      bash
      复制
       
       
      (gdb) info registers    # 显示所有寄存器值
  3. ​条件断点与观察点​

    • 条件断点(当变量 i == 5时触发):

      bash
      bash
      复制
       
       
      (gdb) break 20 if i == 5
    • 监控变量变化:

      bash
      bash
      复制
       
       
      (gdb) watch my_var      # 当 my_var 值变化时暂停

​四、高级调试技巧​

  1. ​远程调试附加进程​

    bash
    bash
    复制
     
     
    (gdb) target remote :2345  # 连接到本地2345端口(默认)
  2. ​加载核心转储文件​

    bash
    bash
    复制
     
     
    (gdb) core-file core.dump  # 加载崩溃时的核心转储文件
  3. ​多线程调试​

    • 查看线程列表:

      bash
      bash
      复制
       
       
      (gdb) info threads
    • 切换线程:

      bash
      bash
      复制
       
       
      (gdb) thread 2           # 切换到线程2

​五、常见问题解决​

  1. ​无法加载符号​

    • 确保编译时添加 -g选项(保留调试信息)。

    • 使用 file命令重新加载程序。

  2. ​连接失败​

    • 检查防火墙是否放行端口(如 2345)。

    • 确认目标机和主机的 IP 地址正确。

  3. ​段错误定位​

    • 使用 catch signal SIGSEGV捕获信号:

      bash
      bash
      复制
       
       
      (gdb) catch signal SIGSEGV
      (gdb) run

​六、总结​

  • ​核心流程​:

    gdbserver启动监听 → 主机 gdb连接 → 加载程序 → 设置断点 → 运行调试。

  • ​关键命令​:break, step, next, print, backtrace是调试的核心工具。

  • ​调试原则​:

    • 始终使用 -g编译程序。

    • 优先通过日志和断点缩小问题范围。

通过上述命令,可高效完成嵌入式 Linux 程序的远程调试。如需更复杂场景(如多进程、信号处理),可结合 GDB 脚本或 Python 扩展

。

 

相关新闻

  • Zerotier,内网穿透神器 - IT苦行僧
  • 311、出塞
  • PCL2 下载安装全攻略:整合包导入 + Mod安装 + 常见问题汇总(2025最新版)

最新新闻

  • MPC56x Nexus调试实战:从READI模块配置到复杂时序问题定位
  • Prompt Caching原理与生产级落地实战指南
  • Java调用Google搜索的原理与安全实践
  • HYPERHEURIST框架:融合模拟退火与LLM的RTL硬件设计优化新范式
  • 基于LCU API的英雄联盟客户端工具包技术深度剖析:5大创新架构设计
  • 大语言模型在法律文本简化中的评测与优化实践

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号