GDB调试指南:启动方式与常用指令解析

需积分: 16 2 下载量 38 浏览量 更新于2024-08-05 收藏 310KB PDF 举报
"gdb调试指令详解-入门学习使用" GDB(GNU Debugger)是Linux环境下的一个强大调试工具,用于帮助程序员在代码运行时检查和分析程序的状态。它支持多种编程语言,包括C、C++、Fortran等。本文将详细介绍gdb的基本使用方法和常用指令,帮助初学者快速掌握gdb的调试技巧。 ### gdb启动方式 1. **直接启动调试进程**: 使用`gdb a.out`命令启动gdb,并关联到可执行文件`a.out`。 2. **调试core文件**: 当程序崩溃产生core dump后,可以用`gdb a.out core`来调试core文件,找出崩溃原因。 3. **带参数启动**: 若要在启动时传入参数,可以使用`gdb --args a.out arg1 arg2`,这样启动的程序会带有指定的参数。 4. **调试fork的子进程**: 在需要跟随子进程调试时,先设置`set follow-fork-mode child`,然后运行程序。 ### gdb常用指令 #### 查看代码 1. **list (l)**: 用于查看源代码。例如,`list LINENUM`显示指定行号附近的代码;`list FILE:LINENUM`查看指定文件的特定行;`list FUNCTION`列出函数的代码;`list FILE:FUNCTION`同理,但指定了文件名;`list *ADDRESS`显示指定内存地址处的代码。 #### 打印变量 1. **print EXP**: 显示表达式`EXP`的值。如`print num`会打印变量`num`的值。 2. **print/FMT EXP**: 使用不同的格式打印变量。`FMT`可以是`o`(八进制)、`x`(十六进制)、`d`(十进制)、`u`(无符号十进制)、`t`(二进制)、`f`(浮点数)、`a`(地址)、`i`(指令)、`c`(字符)、`s`(字符串)、`z`(零填充的十六进制)。 3. **display EXP**: 自动在程序暂停时显示表达式`EXP`的值。如`display sum`会在每次暂停时显示变量`sum`的值。 4. **undisplay/dnums**: 取消显示编号为`dnums`的自动显示表达式。 5. **disable display dnums**: 禁用编号为`dnums`的自动显示。 6. **enable display dnums**: 启用编号为`dnums`的自动显示。 #### 控制程序执行 1. **run**: 开始执行程序,如果带有参数,则使用`run arg1 arg2`。 2. **break FUNCTION/LINE**: 设置断点在函数或行号上,如`break main`会在`main`函数开始处暂停。 3. **continue (c)**: 继续执行程序直到遇到下一个断点或程序结束。 4. **step (s)**: 单步执行,如果当前行有函数调用,会进入该函数。 5. **next (n)**: 同样单步执行,但遇到函数调用时不进入。 #### 查看类型 1. **whatis [arg]**: 查看表达式`arg`的数据类型。 2. **ptype [arg]**: 详细显示变量`arg`的类型信息。 以上指令只是gdb功能的一小部分,实际上gdb还提供了更多高级功能,如设置条件断点、监控内存区域、回溯调用栈、修改变量值等。熟练掌握gdb的使用,对于调试复杂问题、优化代码效率都大有裨益。在实际开发中,应根据需求灵活运用这些工具,提升开发效率。