GDB调试


前言

gdb是GNU Debugger的缩写,是GNU项目开发的自由开源软件调试工具。GDB 是一套字符界面的程序集,可以使用命令 gdb 加载要调试的程序。


一、启动与退出gdb

# -g 将调试信息写入到可执行程序中
gcc -g main.c -o app

#启动gdb
gdb app
(gdb) 		# gdb等待输入调试的相关命令

#退出gdb
q

二、设置参数

#设置参数
set args 1 2 3 4 5
#展示参数
show args

三、启动程序

#方法一:启动程序, 最终会阻塞在main函数的第一行
start
#方法二:run可以缩写为 r, 如果程序中设置了断点会停在第一个断点的位置, 如果没有设置断点, 程序就执行完了
run

四、查看代码

# 使用 list 和使用 l 都可以
# 从第一行开始显示
(gdb) list 

# 列值这行号对应的上下文代码, 默认情况下只显示10行内容
(gdb) list 行号

# 显示这个函数的上下文内容, 默认显示10(gdb) list 函数名

五、设置显示行数

# 以下两个命令中的 listsize 都可以写成 list
(gdb) set listsize 行数

# 查看当前list一次显示的行数
(gdb) show listsize

六、设置断点

1、设置普通断点到当前文件
# 在当前文件的某一行上设置断点
# break == b
(gdb) b 行号
(gdb) b 函数名		# 停止在函数的第一行

2、设置普通断点到某个非当前文件上
# 在非当前文件的某一行上设置断点
(gdb) b 文件名:行号
(gdb) b 文件名:函数名		# 停止在函数的第一行

3、设置条件断点
# 必须要满足某个条件, 程序才会停在这个断点的位置上
# 通常情况下, 在循环中条件断点用的比较多
(gdb) b 行数 if 变量名==某个值

七、查看与删除断点

# 查看设置的断点信息
(gdb) i b   #info break

# 删除断点  delete == del == d
# 举例: 
(gdb) d 1          # 删除第1个断点
(gdb) d 2 4 6      # 删除第2,4,6个断点
(gdb) d 1-5        # 举例, 删除第1到第5个断点

八、设置断点状态

1、设置断点无效

# 设置第2,4个断点无效
(gdb) dis 2 4

# 设置 第5,6,7,8个 断点无效
(gdb) dis 5-8

2、设置断点生效

# 设置第2,4个断点生效
(gdb) ena 2 4

# 设置 第5,6,7,8个 断点生效
(gdb) ena 5-8

九、打印信息

1、打印变量值

# 举例
(gdb) p i       # 10进制
$5 = 3
(gdb) p/x i     # 16进制
$6 = 0x3
(gdb) p/o i     # 8进制
$7 = 03

2、打印变量类型

# 打印变量类型
(gdb) ptype i
type = int
(gdb) ptype array[i]
type = int
(gdb) ptype array
type = int [12]

十、单步调试

1、 step命令可以缩写为s, 命令被执行一次代码被向下执行一行,如果这一行是一个函数调用,那么程序会进入到函数体内部。

2、 finish如果通过 s 单步调试进入到函数内部, 想要跳出这个函数体, 可以执行finish命令。如果想要跳出函数体必须要保证函数体内不能有有效断点,否则无法跳出。

3、next命令和step命令功能是相似的,只是在使用next调试程序的时候不会进入到函数体内部,next可以缩写为 n。

4、 通过 until 命令可以直接跳出某个循环体,这样就能提高调试效率了。如果想直接从循环体中跳出, 必须要满足以下的条件,否则命令不会生效:
a.要跳出的循环体内部不能有有效的断点。
b.必须要在循环体的开始/结束行执行该命令。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白曰梦想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值