1.调试前准备 -g
gcc arcg.c -g -oO -o app //必须添加-g
2.调试 gdb
gdb app
3.常见调试命令
set args 1 2 3 4 5 6 //设置参数
show args //查看参数
3.1执行程序 1.start2. run
gdb app
set args 1 2 3 4 5
start //执行一行
c //继续执行
q //退出
gdb app
set args 1 2 3 4 5
run/r
3.2查看代码list l
gdb app
list/l //默认只显示10行 直接回车显示下10行
list 行号
list 文件名:行号
list 函数名
list 文件名:函数名
set listsize/list 20 //修改显示行数 20行
3.3断点 break b
b 行号
b 函数名
b 文件名:行号
b 文件名:函数名
3.3.1条件断点 if
b 30 if i==5 //i=5时断点生效
3.3.2查看断点 i
info/i
i b //info break
3.3.3删除断点 d
delete/d
d 断点编号
d 1
d 2 4 6
d 1-5
3.3.4设置断点无效 dis
disable//d
dis 断点编号
dis 1-5
3.3.5使无效断点生效 ena
enable==ena
ena 断点的编号
ena 1-5
3.4继续运行 continue c
3.5打印变量 print p
p 变量名
p i
p/fmt i
3.5.2打印变量类型 ptype
ptype i
3.5.3自动打印信息 display 自动打印变量值
程序运行到断点后 输入display
启动单步调试 n 后会自动显示
display i
displat/fmt i
查看自动打印列表
info display
(gdb) info display
Auto-display expressions now in effect:
Num Enb Expression
1: y i
2: y array[i]
3: y /x array[i]
3.5.4取消自动显示 undisplay
undisplay 1 2
3.5.5禁用自定显示 disable
disable display 1
3.5.6启用自动显示enable
enable display 1
4.单步调试
4.1对程序逐行执行 进入函数内部 step s
4.2从函数跳出 finish
跳出的函数内部无断点 或者断点无效
4.3对程序跳过执行 跳过函数 next n
4.4.单步调试 跳出循环 until
条件
1.内部不可有断点
2.必须在循环体开始或结束执行
5.设置变量值 set var i=5
使用场景 如控制循环轮次
6总结
gcc main.c -o main -g
gdb main
set args 1 2 3 4
show args
run/r or start
contibue/c
quit/q
list/l
info/i
b 1
delete/d -- d 1
disable/dis -- dis 1
enable/ena --ena 2continue/c --c
print/p i
ptype i
display
undisplay
disable display
enable display
step/s
next/n
finish
until
set var i=5
学习总结
10.1 gdb的准备工作_哔哩哔哩_bilibili