【Linux】[gdb]Linux环境下如何调试代码

一、code.c文件

我们首先创建一个code.c文件,写一段简单代码,用于测试。

【Linux】[gdb]Linux环境下如何调试代码_第1张图片

 

二、makefile文件

然后,我们可以编写makefile文件,使得code.c文件能够进行编译。(当然也可以不写makefile文件,直接对code.c进行编译)

【Linux】[gdb]Linux环境下如何调试代码_第2张图片 如果没有-g ,则是以release模式编译该程序

三、使用gdb调试

一般情况下,gdb是默认安装好了的。

1、 生成mybin文件(可执行程序)

【Linux】[gdb]Linux环境下如何调试代码_第3张图片

2、gdb打开关闭

(1)gdb 可执行程序

 【Linux】[gdb]Linux环境下如何调试代码_第4张图片

(2)quit/q

使用quit或者q退出

 【Linux】[gdb]Linux环境下如何调试代码_第5张图片

 

3、调试 

 (1)list/l (显示代码)

功能:打开代码,显示代码及行号

注意:一次list 可能不能完整显示所有代码,所以需要多次回车(直接回车就是上一个命令)(也可以再次使用list命令,效果一样)。

此外,我们还可以使用  l 数字(比如: l 1),使得从第1行开始显示

【Linux】[gdb]Linux环境下如何调试代码_第6张图片

 (2)run/r(执行)

功能:执行(若不打断点,则直接运行到结束)

以下即为不打断点的结果

【Linux】[gdb]Linux环境下如何调试代码_第7张图片

(3)break/b 数字(行号)等(例:b 5) (打断点)

功能;打断点

也可以使用 b 函数名 来打断点

 比如: b main 

就是在main函数入口处打断点

 

(4)info b(显示断点)

功能:显示断点

 

【Linux】[gdb]Linux环境下如何调试代码_第8张图片 

(5)d 编号(删除断点)

功能:删除断点

注意:删除断点只能通过Num列的序号来删除

即使删除断点,断点的编号也会一直增加

而退出gdb,重新进入时,则之前的断点全部清空

【Linux】[gdb]Linux环境下如何调试代码_第9张图片 

 (6)disable 编号(禁用断点)

例:disable 1

若不禁用断点1,则是以下执行结果:

【Linux】[gdb]Linux环境下如何调试代码_第10张图片

我们此时禁用断点1,则执行结果如下: 

由于调试已经开始,它问我们是否从头开始执行,我们输入:y(表示yes) 

 【Linux】[gdb]Linux环境下如何调试代码_第11张图片

 再次输入r命令,执行结果如下:

【Linux】[gdb]Linux环境下如何调试代码_第12张图片

(7)enable 编号(启用断点)

例:enable 1 

 【Linux】[gdb]Linux环境下如何调试代码_第13张图片

(8)next/n (逐过程调试(类似于VS中的F10))

注: 如果遇到有调用函数时,则不会跳到该函数处。

【Linux】[gdb]Linux环境下如何调试代码_第14张图片

 

(9)step/s (逐语句调试(类似VS中的F11))

 注: 如果遇到有调用函数时,则会跳到该函数处。

【Linux】[gdb]Linux环境下如何调试代码_第15张图片

(10)p 变量名/地址等(显示)

例:p i   

p &i

【Linux】[gdb]Linux环境下如何调试代码_第16张图片 

(11)display  变量名/地址(长显示)

例:display i

display &i 

【Linux】[gdb]Linux环境下如何调试代码_第17张图片 

当我们 调试时,display的变量会一直显示

【Linux】[gdb]Linux环境下如何调试代码_第18张图片

(12)undisplay 编号(取消长显示)

【Linux】[gdb]Linux环境下如何调试代码_第19张图片 

(13)until 行号 (运行到指定的位置)

【Linux】[gdb]Linux环境下如何调试代码_第20张图片 

(14)finish (运行至该函数结束)

功能:运行至当前函数的结尾

(15)continue/c (运行至下一断点处)

我们首先增加一个断点

【Linux】[gdb]Linux环境下如何调试代码_第21张图片

 然后使用continue:

【Linux】[gdb]Linux环境下如何调试代码_第22张图片

(16)bt  : 查看调用堆栈

 【Linux】[gdb]Linux环境下如何调试代码_第23张图片

 

(17)set var (更改变量的值)

例:set var i = 9

【Linux】[gdb]Linux环境下如何调试代码_第24张图片 

你可能感兴趣的:(Linux,linux,运维,服务器)