1.gdb的安装
如果你是root用户直接用指令 :yum install gdb ;如果你是普通用户用指令:sudo yum install gdb;
2.gdb调试前可以对你的makefile文件进行编写:
下面展示为11.c文件编写的makefile文件:
code-debug:11.cgcc -g 11.c -o code-debug .PHONY:cleanclean:rm -f code-debug
3.开始调试:
当你的makefile编写完成后,你执行了make指令后,生成了可执行程序code-debug;你输入指令:gdb code-debug
出现这个界面说明你进入gdb成功!
接下来是一些常见的指令:
启动与退出
gdb <program>
:启动 Gdb 并加载指定的可执行文件。例如gdb main
,用于调试名为main
的可执行程序。quit
或q
:退出 Gdb 调试环境。
程序执行控制
run
或r
:启动程序的执行,可带参数,如run arg1 arg2
,表示使用参数arg1
和arg2
运行程序。continue
或c
:从当前断点处继续执行程序,直到遇到下一个断点或程序结束。next
或n
:单步执行程序,遇到函数调用时,不会进入函数内部,直接执行函数调用语句的下一行。step
或s
:单步执行程序,若当前行是函数调用,则会进入函数内部继续单步执行。finish
:继续执行当前函数,直到函数返回,并显示返回值。until
:不带参数时,执行直到当前函数返回;带参数(如行号或地址)时,程序继续执行直到到达指定位置。
断点操作
break <location>
或b <location>
:在指定位置设置断点,位置可以是行号(如b 10
在第 10 行设置断点)、函数名(如b main
在main
函数入口设置断点)或文件名 + 行号(如b main.c:20
在main.c
的第 20 行设置断点)。tbreak <location>
:设置临时断点,该断点在被命中一次后自动删除。info breakpoints
或info b
:显示当前设置的所有断点的信息,包括断点编号、位置、是否启用等。delete <breakpoint_number>
:删除指定编号的断点,如delete 1
删除编号为 1 的断点。disable <breakpoint_number>
:禁用指定编号的断点,使其暂时不起作用,但断点信息仍保留。
enable <breakpoint_number>
:启用之前被禁用的指定编号的断点。
查看与打印
list
或l
:显示当前执行位置附近的源代码,默认每次显示 10 行。也可指定行号(如l 50
从第 50 行开始显示)或函数名(如l main
显示main
函数的代码)来显示特定内容。
print <expression>
或p <expression>
:打印指定表达式的值,如p x
打印变量x
的值,p a + b
打印a + b
的计算结果。display <expression>
:每次程序停止时自动显示指定表达式的值,便于监控变量变化,如display i
每次程序暂停时都会显示变量i
的值。undisplay <display_number>
:删除指定编号的自动显示设置,编号可通过info display
查看。backtrace
或bt
:显当前的函数调用栈信息,帮了解程序的执行路径和各函数间的调用关系。info locals
:查看当前作用域内的局部变量及其值。whatis <variable>
:显示变量的类型。ptype <variable>
:显示变量详细的类型信息,对于结构体、类等复杂类型会展示其成员信息 。
观察点操作
watch <expression>
:设置观察点,当指定的表达式的值发生变化时,程序暂停执行。rwatch <expression>
:设置只读观察点,当程序读取指定表达式的值时,程序暂停执行。awatch <expression>
:设置读写观察点,当程序读取或写入指定表达式的值时,程序暂停执行。
其他常用指令
set <variable>=<value>
:设置变量的值,如set n = 10
将变量n
的值设置为 10。
return
:强制从当前函数返回,可带返回值,如return 5
使当前函数直接返回 5。shell <command>
:在不离开 Gdb 的情况下,执行 Linux shell 命令,如shell ls
可列出当前目录下的文件和目录。help <command>
:查看指定 Gdb 命令的帮助信息,若不指定具体命令,会显示 Gdb 的总体帮助信息和命令分类。
Linux系统下调试的时候其实是有一种历史机制的,所以它再调试过程中可以进行直接回车接着进行!