前两篇Linux C语言编程(上篇) | gcc的使用和Linux C语言编程(中篇) | make的使用讲述了在Linux下如何编译得到可执行程序,那么当程序执行结果不符合我们的预期时,如何进行调试呢?这个时候就要使用到gdb工具了~
1.gdb介绍
gdb也属于GNU项目的一部分,是一个调试工具,它的主要功能是:
- 用户可以自定义如何运行程序
- 可以在指定断点处运行停止
- 可以检查各个变量的值
- 可以动态改变程序的执行环境
使用命令gdb -v
查看系统中是否安装有gdb调试工具,若无,需要先安装:
以上一篇中的例子为例
2.使用gdb的前提
使用gdb调试可执行程序的时候,可执行程序必须要包含有相应的调试信息,这样我们调试的时候才能看到我们熟悉的名称,否则就是一堆内存地址,很不方便调试,那么如何得到带有调试信息的可执行程序呢?
其实很简单,在使用编译器(比如gcc
)编译的时候带有-g
参数就可以啦~
修改makefile文件如下:
然后重新执行make指令编译(若有可执行程序,先执行make clean清除):
3.gdb的使用
3.1.gdb启动调试
使用gdb <可执行程序名称>
即可进入gdb调试环境,此处输入gdb cal
,可以看到成功进入调试环境:
3.2.gdb调试命令
在gdb调试环境下,使用gdb调试命令进行调试,gdb的命令主要有以下几个:
命令 | 描述 |
---|---|
list(l) | 查看代码(默认一次显示10行) |
break(b) 行号或函数名 | 设置断点 |
clear(c)行号或函数名 | 清除断点 |
ignore 断点号 num | 忽略对应断点num次 |
info b | 查看当前所设断点 |
r(run) | 运行程序 |
n(next) | 单步调试,不进入函数调用 |
s(step) | 单步调试,进入函数调用 |
p(print)变量名 | 查看变量 |
display 变量名 | 每次自动显示该变量值 |
c(continue) | 继续运行,直到结束或遇到新断点 |
finish | 运行程序,直到当前函数完成返回 |
q(quit) | 退出 |
shell command | 执行shell命令 |
3.3.gdb调试实例
首先查看代码:
然后在第7行设置断点,注意设置了断点之后程序会停在第7行前,也就是不执行第7行:
然后单步执行,但不进入函数,再次查看变量值: