gdb使用
2017-05-10 19:16:52 # cpp

编译携带调试信息的可执行程序

1
2
3
4
5
6
7
gcc编译时加上-g参数
gcc *.c -o myapp -g

因为携带调试信息,带-g参数生成的可执行文件体积会比不带-g参数的大,发布应用的时候一般取消—g参数生成可执行程序。

进入调试
gdb 带-g参数生成的可执行文件

GDB 调试

1
2
3
4
start       # 只执行一步
next(n) # 继续执行 单步走 跳过函数
step(s) # 继续执行 单步走 可以进入到函数内部
continue(n) # 继续执行 直接停在断点位置

查看代码

1
2
3
# list(l)
l # 行号|函数名
l # 文件名:行号|函数名字

设置断点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 设置文件断点
# break(b)
b # 行号|函数名
b # 文件名:行号|函数名

# 设置条件断点
b 行号 条件 if value == 19

# 查看断点编号
# info (i) # 查看信息
i b # 查看设置断点

# 删除断点
# detele(d)
d # 断点编号(通过info b查看断点信息获取编号)

开始执行GDB调试

1
2
3
4
5
#执行一步操作
start
#继续执行
n|s
#执行多步,直接停在断点处

单步调试

1
2
3
4
5
6
7
# 进入函数体内部
s
# 从函数体内部跳出 finish 如果有断点则需要删除断点信息才能跳出
# 不进入函数体内部
n
# 退出当前循环
u

查看变量

1
2
3
4
5
6
7
8
9
10
11
12
# 查看变量的值
print(p) 变量名
# 查看变量的类型
ptype 变量名
# 设置变量的值
set var 变量名=赋值
# 设置追踪变量
display 变量
# 取消设置追中变量
undisplay 编号
# 获取编号
info display

退出gdb调试

1
quit