gdb 个人使用小结

以下内容主要参考自 100-gdb-tips (github),其在 Gitbook 上还有可读性更好的版本 100-gdb-tips (gitbook),但偶尔会访问不了

背景

本人平时主要写 C 语言,代码规模大起来后单纯靠 print 调试的话效率偏低,因此尝试用安装上手较为简单的 gdb 辅助调试,以下是个人觉得使用频率较高的 gdb 相关使用总结

使用环境:

  • Ubuntu-22.04
  • gdb 12.1
  • gcc 11.4.0

配置

有两个文件,具体说明参见 gdb 手册

gdbearlyinit

也可以在 ~/.bashrc 中起别名 alias gdb='gdb -q',看个人需求

# 启动时不打印提示信息
# gdb -q
set startup-quietly on

gdbinit

相比 配置gdb init文件,删除了 C++ 相关的设置

# 保存历史命令
set history filename ~/.gdb_history
set history save on

# 退出时不显示提示信息
set confirm off

# 打印数组的索引下标
set print array-indexes on

# 每行打印一个结构体成员
set print pretty on

# 输出信息多时不分页输出
set height 0

编译选项

一些特殊的调试需求得在 gcc 编译时对应设置

宏定义支持

缺省情况下不能通过 print <macro_name> 的方式打印宏定义的值,需要添加两个选项

  1. -g3/-ggdb3

    后一个是避免使用 gdb 时提示无调试信息

  2. -gdwarf-2/-gdwarf-3/-gdwarf-4

    这一选项在 支持预处理器宏信息 中没有提及,但是不加就没效果,还是参考 12 C Preprocessor Macros 找到的

未使用的自定义类型

缺省情况下如果自定义的类型没有使用到,调试时使用 sizeof 会无法找到对应的符号信息

  • -fno-eliminate-unused-debug-types

命令

函数相关

gdb函数相关操作

断点

gdb断点相关操作
观察点可以视为更自动化的断点
gdb观察点相关操作
until/u 可视为断点 break 与继续 continue 的结合,可用来执行完循环内容等,就不赘述了

打印

gdb打印相关操作

其他

gdb其他操作

尾记

原链接中其实还有 C++ 相关、多线程、汇编等调试相关内容,本人暂时涉及不到,就不记录了,感兴趣的读者可对照 100-gdb-tips (github) 查看

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值