一、code.c文件
我们首先创建一个code.c文件,写一段简单代码,用于测试。
二、makefile文件
然后,我们可以编写makefile文件,使得code.c文件能够进行编译。(当然也可以不写makefile文件,直接对code.c进行编译)
如果没有-g ,则是以release模式编译该程序
三、使用gdb调试
一般情况下,gdb是默认安装好了的。
1、 生成mybin文件(可执行程序)
2、gdb打开关闭
(1)gdb 可执行程序
(2)quit/q
使用quit或者q退出
3、调试
(1)list/l (显示代码)
功能:打开代码,显示代码及行号
注意:一次list 可能不能完整显示所有代码,所以需要多次回车(直接回车就是上一个命令)(也可以再次使用list命令,效果一样)。
此外,我们还可以使用 l 数字(比如: l 1),使得从第1行开始显示
(2)run/r(执行)
功能:执行(若不打断点,则直接运行到结束)
以下即为不打断点的结果
(3)break/b 数字(行号)等(例:b 5) (打断点)
功能;打断点
也可以使用 b 函数名 来打断点
比如: b main
就是在main函数入口处打断点
(4)info b(显示断点)
功能:显示断点
(5)d 编号(删除断点)
功能:删除断点
注意:删除断点只能通过Num列的序号来删除
即使删除断点,断点的编号也会一直增加
而退出gdb,重新进入时,则之前的断点全部清空
(6)disable 编号(禁用断点)
例:disable 1
若不禁用断点1,则是以下执行结果:
我们此时禁用断点1,则执行结果如下:
由于调试已经开始,它问我们是否从头开始执行,我们输入:y(表示yes)
再次输入r命令,执行结果如下:
(7)enable 编号(启用断点)
例:enable 1
(8)next/n (逐过程调试(类似于VS中的F10))
注: 如果遇到有调用函数时,则不会跳到该函数处。
(9)step/s (逐语句调试(类似VS中的F11))
注: 如果遇到有调用函数时,则会跳到该函数处。
(10)p 变量名/地址等(显示)
例:p i
p &i
(11)display 变量名/地址(长显示)
例:display i
display &i
当我们 调试时,display的变量会一直显示
(12)undisplay 编号(取消长显示)
(13)until 行号 (运行到指定的位置)
(14)finish (运行至该函数结束)
功能:运行至当前函数的结尾
(15)continue/c (运行至下一断点处)
我们首先增加一个断点
然后使用continue:
(16)bt : 查看调用堆栈
(17)set var (更改变量的值)
例:set var i = 9