GDB调试指南

GDB调试指南

操作使用

进入gdb调试

  1. gdb ./helloworld
  2. 后台进入gdb调试:sudo gdb attach PID
    r/run 开始/重新开始执行应用程序,应用程序重头开始,直到遇到断点
    list列出源码,持续键入回车,代码向后展开
    n/next 单步执行,单步调试
    回车 重复执行上条命令
    focus 显示源码 ctrl+x A 退出focus
    finish/fin 结束当前函数
    s 跳入函数
    b func/line 用于设置断点,可以在文件某一行,某个函数等
    del 1 删除1号断点
    dis 1 关闭1号断点
    en 1 打开1号断点
    info b 查看所有断点
    info register 查看寄存器
    p var 打印变量,可以打印当前所有变量,打印类型需要匹配
    x /10 ptr 向上dump ptr附近的10个字节内容
    set var 设置变量值
    bt 查看调用栈
    watch 观察点(地址),当地址中的内容发生变化,程序会停下来
    condition 当 0x565d046c 的内容被修改成 0 时停下来
    frame 3 跳到栈的第三层,方便查看当前栈信息
    c 继续执行,直到下一个断点
    disassemble func 对函数进行反汇编
    disassemble /m ptr 反汇编出指针附近的代码
    q 退出GDB

使用场景

  1. 异常退出
  • 场景:运行程序,报错、程序异常crash退出,程序终止
  • 解决方法: gdb lunch程序,输入r正常运行,当程序终止时,可以使用gdb命令bt查看调用栈,排查问题
  1. ** 忙等待**
  • 场景: 运行程序,终端卡住,不能输出任何内容
  • 解决方法:
    A. 可以在后台查看当前程序的pid,使用sudo gdb attach pid,接手程序运行,使用命令bt查看调用栈,排查问题。
    B. pkill -SIGSTOP nuttx
    C. kill -19 pid
  1. 变量被改
  • 场景: 运行程序,多线程,一个变量被修改,但不知道是谁
  • 解决方法: gdb lunch程序,然后使用命令watch 加变量的地址,当变量内容发生变化时,程序停止,使用bt查看调用栈,排查问题。
  1. 函数异常返回
  • 场景: 运行程序,函数异常返回,但不知道对应哪个逻辑
  • 解决方法: gdb lunch程序,然后使用命令b 加函数名称,设置断点,r运行,当程序停下来时,使用n或者s进行单步跟踪,直到异常退出
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值