gcc -main.c hello.c -o app1 -I head -g
(使用 -g
将源程序带调试信息打包为可执行程序app1
)
执行gdb调试
gdb app1
(用gdb调试
上述可执行程序)
start
(让程序开始执行,执行一步后停下)
r
或者run
(让程序继续执行直到遇到断点或者结束)
n
(下一步,开始单步调试,遇到函数不进入函数内部)
s
(下一步,开始单步执行,遇到函数则进入函数)
c
(程序继续执行到断点处或执行至结束)
查看代码
l
(显示main函数文件内容)
l 10
(显示第10
行附近的代码段)(也可以时函数名,下同)
l hello.c:20
(显示main.c
函数所在文件同级目录内的hello.c
的第20
行前后的内容
l hello.c:print
(显示main.c
函数所在文件同级目录内的hello.c
中的print
函数的内容)(继续按l
可使该函数继续显示,第三次后直接回车即可,不需再次按l
)
设置断点
b 5
或 break 5
(在当前打开文件第5行
加断点)(也可以时函数名,下同)
b filename:num
(给文件filename
的行号为num
处添加断点)
b 15 if i==13
(条件断点,当值增到13
时才触发断点)
i b
(查看已有断点信息)(information break
)
d num
(删除断点,断点num
来自上方i b
)
查看变量的值或类型
p i
(查看当前时刻i
的值)
ptype i
(查看当前时刻i
的类型)
设置追踪变量
display i
(追踪i
,每次循环打印i
的值)
info display
(显示所有追踪变量的信息)
undisplay num
(不再追踪变量id
为num
的变量,num
通过info display
获取)
程序运行
u
(半点类似于continue
,会跳出单次循环,然后进行循环后面的代码)
finish
(执行并跳出当前函数,回到main
函数)(需要取消当前函数中会阻塞程序运行的断点)
set var i = 10
(设置当前时刻程序中的变量i
值为10
)
q
或者 quit
退出gdb调试