最简单的gdb调试步骤
1. 使用gcc -g 参数编译生成可调试的程序app
gcc main.c -o app -g
2. 启动gdb调试程序
gdb app
如果需要给程序传递参数的话,在gdb启动后使用set args传参:
set args xxx xxx xxx
启动调试:
run #或缩写:r
3. gdb启动后查看代码的命令:list(缩写:l)
l #默认显示10行代码
l 25 #查看第25行附近的代码
l main.c #查看main.c的代码
l math.c:add #查看math.c文件中 add函数的代码
l math.c:30 #查看math.c文件中 第30行附件的代码
- show listsize #查看list命令一次显示的行数
- set listsize 20 #设置list命令一次显示20行
4. 设置断点的命令:break(缩写:b)
b 12 #在第12行添加断点
b 行号
b 函数名
b 文件名:行号
b 文件名:函数名
5. 查看断点信息的命令:info(缩写:i)
i b
6. 删除断点的命令:del(缩写:d)
d 2 #删除Num为 2 的断点
d 3 8 #删除Num为3和8的断点
d 4-7 #删除Num(从4到7)的断点
7. 设置断点无效的命令:dis
dis 8 #停用Num为8的断点
8.启用断点的命令:ena
ena 8 #启用Num为8的断点
9.设置条件断点:
b 17 if i==10 #循环体中i的值为10时,断点生效
10. 启动程序开始调试的命令:run(缩写:r)
11.程序遇断点后,继续运行程序的命令:continue(缩写:c)
12.打印变量值的命令:print(缩写:p)
13.查看变量类型的命令:ptype
14.逐步调试命令:next(缩写:n)
15.显示变量值的命令:display
display 变量
16.查看当前显示变量的列表:
i display
17.取消变量值的显示命令:undisplay
undisplay Num
18.进入函数内部的命令:step(缩写:s)
19.跳出函数体的命令:finish
注意:函数体内部如果有循环断点的话, 无法达到跳出函数体的效果。
20.设置变量值的命令:set var
set var x=10 #设置变量x的值为10
21.跳出for循环的命令:until
注意:for循环中如果还有断点的话,是达不到跳出for循环效果的。
22.退出调试的命令:quit(缩写:q)