学堂 学堂 学堂公众号手机端

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

lewis 4年前 (2021-11-04) 阅读数 4 #技术


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



版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门