0
点赞
收藏
分享

微信扫一扫

gdb入门教程大全(清晰明了)


gdb介绍

gdb只是众多调试器中的一个,但是它是用得最多的,所以有必要了解一下。

gdb和gcc一样,都属于gnu开源家族工具链,所以gdb对gcc编译后的程序的调试支持最好。

学习一个工具,当然得先去看它官网,了解清楚整个脉络。

官网:​​https://www.sourceware.org/gdb/​​

我们这里关注如何使用,所以进入它的在线文档网站: ​​https://sourceware.org/gdb/current/onlinedocs/gdb/​​

(可能大家通过别的链接进入的网站跟这个不一样,那是因为这个gdb网站服务器里有多个版本的文档仓库,而官网这里进去的,总是最新的版本的文档)

还给了个pdf文档:​​https://sourceware.org/gdb/current/onlinedocs/gdb.pdf​​ 这个就是在线文档内容搬过来的,内容和结构基本一样,喜欢看pdf的可以看这个。

gdb的调试方式和概念

gdb调试的方式主要有本地调试和远程调试

gdb教程结构

点进去在线文档后,我们发现内容就包括如下部分:(重要的加粗显示,关键性的标红显示)

  • ​​Invocation (Debugging with GDB)​​ 如何启动和退出gdb
  • ​​Commands (Debugging with GDB)​​ gdb的命令行规则与说明
  • ​​Running (Debugging with GDB)​​ 如何启动一个被调试程序(inferior)
  • ​​Stopping (Debugging with GDB)​​ 单步运行,断点设置等
  • ​​Reverse Execution (Debugging with GDB)​​ 程序倒退运行,这个需要被调试对象的支持,很少能支持这个
  • ​​Process Record and Replay (Debugging with GDB)​​ 调试时候记录为过程日志,再次调试就不需要真的调试执行该程序了
  • ​​Stack (Debugging with GDB)​​ 执行过程中的调用栈相关命令行,比如函数调用层次等
  • ​​Source (Debugging with GDB)​​打印出程序的源码,反汇编等信息
  • ​​Data (Debugging with GDB)​​ 打印出变量,内存,寄存器等的值,支持结构体层级信息(挺好的)
  • ​​Optimized Code (Debugging with GDB)​​ 编译器的代码优化关于调试方面的选项
  • ​​Macros (Debugging with GDB)​​ 显示程序中的宏定义等信息
  • ​​Tracepoints (Debugging with GDB)​​ 设置调试的跟踪点功能(某些程序必须实时运行,不能被调试中断下来,用于调试此类程序),运行完后我们查看这些设置的跟踪点的变量值,寄存器等各种信息,实现调试。这其实跟我们直接printf差不多,但是printf更好用,简单明了。
  • ​​Overlays (Debugging with GDB)​​ 被调试程序太大,不能一次性放入目标机的内存,从而分段放入
  • ​​Languages (Debugging with GDB)​​ 关于源码语言的
  • ​​Symbols (Debugging with GDB)​​ 查询被调试程序中的各种符号信息不需要调试对象实际运行起来),比如地址,类型等
  • ​​Altering (Debugging with GDB)​​ 调试时候改变程序的运行,比如让它跳转,返回,调用别的函数等
  • ​​GDB Files (Debugging with GDB)​​ 指定当前调试的文件,更新符号表等
  • ​​Targets (Debugging with GDB)​​ 指定调试目标机
  • ​​Remote Debugging (Debugging with GDB)​​ 启动gdbserver等进行远程调试
  • ​​Configurations (Debugging with GDB)​​ 设置目标机的一些特性
  • ​​Controlling GDB (Debugging with GDB)​​ 控制gdb的和我们的交互体验,进行一些交互方面的设置
  • ​​Extending GDB (Debugging with GDB)​​ gdb的一些语言特性方面的扩展
  • ​​Interpreters (Debugging with GDB)​​ 支持的命令解释器,包括控制台命令解释器(CLI接口),机器接口(MI接口,给IDE用的
  • ​​TUI (Debugging with GDB)​​ gdb的一个文本形式的前端界面交互
  • ​​Emacs (Debugging with GDB)​​ Emacs编辑器使用的相关命令
  • ​​GDB/MI (Debugging with GDB)​​MI机器接口相关命令(反馈信息总为单行,IDE解析用的),没有CLI命令功能那么全,但是这个MI模式下仍然可以用CLI命令的,解析一下gdb的反馈信息的格式区别就行
  • ​​Annotations (Debugging with GDB)​​ 被MI接口功能取代了
  • ​​JIT Interface (Debugging with GDB)​​独立编译动态加载的程序,如何进行调试
  • ​​In-Process Agent (Debugging with GDB)​​ 这个跟上面的调试跟踪点功能有点相似,都是尽量减小对程序的干扰的,这个为了支持多核
  • ​​Command and Variable Index (Debugging with GDB)​​ gdb的所有命令,选项做了一个全局汇总,方便全局搜索,特别方便。

gdb入门教程大全(清晰明了)_运维

gdb入门教程大全(清晰明了)_linux_02

大家知道了gdb的功能分类后,就知道该学习和使用什么命令了,点进去对应的文档,都会有一些例子,还是很容易明白的了,当然,网上也有大量的使用教程,也可以搜来看看,但是可能没这么成体系。



举报

相关推荐

0 条评论