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)如何启动和退出gdbCommands (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的功能分类后,就知道该学习和使用什么命令了,点进去对应的文档,都会有一些例子,还是很容易明白的了,当然,网上也有大量的使用教程,也可以搜来看看,但是可能没这么成体系。
版权声明
本文仅代表作者观点,不代表博信信息网立场。