转:https://blog.csdn.net/qq_39755395/article/details/78305934
一、调试的工具:gdb
二、调试的对象:可执行程序,而不是.c文件,调试的对象一定是一个进程,调试时,程序必须带有调试信息,所以在编译链接的过程中,必须加上参数:“-g”。
三、调试的命令:
l:显示代码
b+行号:加断点
info break:显示断点信息
r:启动程序
n:单步执行
c:继续执行
s:进入函数
finish:退出/跳出函数
display + 变量名 持续打印
p+变量名:打印变量的值
delete+断点号:删除断点信息
bt:函数调用栈关系(在被调用函数里能看见自己和调用函数,在调用函数里只能看见自己)
四、实例:
先编写一个简单的C语言实例
像下面的“gcc -o main main.c”,是无法生成有调试信息的main的,因此无法进行调试。
加上参数“-g”,才可以进行调试。
gcc -o main main.c -g
2、正式开始调试:
gdb l 打开全部代码
下断点,查看断点信息
运行程序 r
下一步,查看i arr[i] 的值 p+变量名
持续显示变量i arr[i]的值
继续执行:
删除断点:
注意删除断点的信息是断点的编号,我先把开始设的断点1号、2号删除了,再新增了两个断点——3号和4号,所以这时候再删除1号断点是不能成功的。
对于后续的调试操作——进入函数、跳出函数和查看函数调用栈关系,我增加了add.c和max.c,再进行新的调试,所有的文件如下: