1.启动和退出gdb
1.1启动gdb
gdb app
1.2命令行传参
int main(int argc, char* argv[]) argc, argv 是命令行参数
//设置的时机:启动gdb之后,在应用程序启动之前
set args 参数1 参数2 参数3 ... ...
//查看设置的命令行参数
show args
1.3gdb中启动程序
方式1:run(r)
方式2:start
区别:
如果程序中设置了断点会停在第一个断点的位置, 如果没有设置断点, 程序就执行完了
最终会阻塞在main函数的第一行,等待输入后续其它 gdb 指令
程序start之后继续运行,或者在断点处继续运行,使用continue(c)命令
1.4退出gdb
quit(q)
2.查看代码
3.1当前文件
默认情况下使用list查看代码信息位于入口函数main对应的那个文件中
//从第一行开始显示
list(l)
//列出行号对应的上下文代码,默认显示10行内容
list 行号
//显示这个函数的上下文内容,默认显示10行内容
list 函数名
若想继续查看后面内容,执行list命令,或者回车
3.2切换文件
//切换到指定文件,并列出行号对应的上下文代码,默认显示10行内容
l 文件名:行号
//切换到指定文件,并显示这个函数的上下文内容,默认显示10行内容
l 文件名:函数名
3.3设置显示的行数
set listsize 行数
//查看当前list一次显示的行数
show listsize
3.断点操作
3.1设置断点
两种方式:第一种是常规断点,程序只要运行到这个位置就会被阻塞;第二种是条件断点,只有指定的条件被满足程序才会在断点处阻塞
//设置普通断点到当前文件
break(b) 行号
break(b) 函数名 ------停在函数的第一行
//设置普通断点到某个非当前文件上
b 文件名:行号
b 文件名:函数名 ------停在函数的第一行
//设置条件断点
b 行数 if 变量名==某个值
3.2查看断点
可以通过 info break命令查看设置的断点信息,info可以简写为 i
i b
# 举例
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000400cb5 in main() at test.cpp:12
2 breakpoint keep y 0x0000000000400cbd in main() at test.cpp:13
3 breakpoint keep y 0x0000000000400cec in main() at test.cpp:18
4 breakpoint keep y 0x00000000004009a5 in insertionSort(int*, int)
at insert.cpp:8
5 breakpoint keep y 0x0000000000400cdd in main() at test.cpp:16
6 breakpoint keep y 0x00000000004009e5 in insertionSort(int*, int)
at insert.cpp:16
Num:断点编号
Enb:当前断点状态
What:断点被设置在哪个文件哪行或哪个函数
3.3删除断点
#delete == del == d
//删除第一个断点
d 1
//删除第2、4、6个断点
d 2 4 6
//删除一个范围,编号num1-numN
d num1-numN
3.4设置断点状态
若某个断点只是临时不需要,可以设置为不可用状态,disable 断点编号;需要时,enable 断点编号
//设置断点无效
#disable == dis
dis 断点编号
//设置某个区间断点无效
dis 断点编号1-断点编号N
//让无效的断点生效
#enable == ena
ena 断点编号
//设置某个区间断点有效
ena 断点编号1-断点编号N
4.调试命令
4.1继续运行gdb
continue(c)
4.2手动打印信息
4.2.1打印变量值
print(p)
格式化字符(/fmt) 说明
/x 以十六进制的形式打印出整数。
/d 以有符号、十进制的形式打印出整数。
/u 以无符号、十进制的形式打印出整数。
/o 以八进制的形式打印出整数。
/t 以二进制的形式打印出整数。
/f 以浮点数的形式打印变量或表达式的值。
/c 以字符形式打印变量或表达式的值。
p 变量名
//如果变量是一个整形,默认对应的值是以10进制输出
#例子
# 举例
(gdb) p i # 10进制
$5 = 3
(gdb) p/x i # 16进制
$6 = 0x3
(gdb) p/o i # 8进制
$7 = 03
4.2.2打印变量类型
ptype 变量名
4.3自动打印信息
4.3.1设置变量名自动显示
频繁查看某个变量或表达式的值,使用display
//自动打印变量的值(设置一次,以后会自动显示)
display 变量名
//以指定的整形格式打印变量值
display/fmt 变量名
4.3.2查看自动显示列表
info display
4.3.3取消自动显示
undisplay num1
//取消某个范围内
undisplay num1-numN
//不删除自动显示的变量,禁用自动显示列表中处于激活状态下的变量或者表达式
disable display num1
//需要启用显示列表中被禁用的变量或者表达式
enable display num
4.4单步调试
4.4.1step
执行一行代码,会进入函数中
4.4.2finish
若通过step单步调试进入函数内,使用finish可跳出函数体,且函数体内不能有有效断点
4.4.3next
单步,但不会进入函数内
4.4.4until
直接跳出某个循环体
注意:循环体内不能有有效断点;必须要在循环体的开始/结束行执行该命令
4.5设置变量值
set var 变量名=值
10-21
9121
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)