文章目录
- gdb 简介
- gdb 的主要功能
- gdb的用法
- 如何进入gdb
- 显示代码
- 如何运行程序
- 如何打断点和取消断点
- 逐语句调试
- 逐行逐行执行代码(s)
- 调试工具
- 总结
gdb 简介
GDB(GNU Debugger)是GNU项目中的一款强大的调试工具,广泛应用于调试C、C++等语言编写的程序。它可以帮助开发者在程序运行时跟踪执行流程、设置断点、查看变量值、检测错误等,大大提高了调试效率。
gdb 的主要功能
- 启动程序:在调试模式下运行程序,方便跟踪。
- 设置断点:允许在程序的特定位置暂停执行,以便检查程序状态。
- 单步执行:逐行执行代码,观察每一行的影响。
- 查看变量和内存:实时查看程序中的变量值及内存地址等内容。
- 调试多线程程序:支持调试多线程环境下的程序。
- 分析崩溃:通过分析崩溃时生成的core文件,找出导致崩溃的原因。
gdb的用法
首先我们要知道的是只有debug才能进行调试,release版本是没有调试信息的,所以我们需要将程序以debug版本形成,但是gcc默认形成的是release版本的,所以我们需要再Makefile中,或者在gcc命令当中加上-g选项,加上-g选项之后产生的程序就是debug版本了。
可以发现用debug版本之后,程序明显变大了,因为添加了调试信息,所以程序变大了。
我们可以来看看
可以看见确实是右debug信息
将编译的程序编程debug模式之后,我们就可以进行调试工具的学习了。
如果Linux系统上没有gdb可以通过下面命令进行下载:
sudo yum install -y gdb
如何进入gdb
gdb 需要调试的程序
这里我们已经进入了gdb的调试模式。
显示代码
l 需要显示的信息
l是list的简称可以表示罗列
比如这里我用l 1
就表示显示1到10行的代码
l 15的时候显示的信息不是15到25行,而是15在中间。
不仅可以这样使用还可以像这样:
显示main函数。
如何运行程序
r
r在没有断点的情况下是直接运行程序,如果有断点就会直接跳到第一个断点处。
可以看见,我们这里没有任何断点,没有任何断点,
可以看见r之后程序直接跑起来了。
如何打断点和取消断点
打断点:
b 需要打断点行数/某个函数
两种打断点的方式,第一种是将断点打在某一行上,第二种是将断点打在某个函数上。
取消断点:
d 断点编号
注意:这里d后面加的是断点编号,而不是断点的行数
展示断点信息:
info b
==注意:断点有三种状态,已经谈过了删除状态,接下来来说一下禁用状态和使能状态。
这一栏表示的是状态,n表示的禁用状态,y表示的是使能状态。
设置状态对应的是disable和enable分别对应的是禁用和使能状态。
设置状态:
enable/disable 断点编号
可以看见disable可以将断点设置为禁用状态,禁用状态和删除状态不一样,禁用状态只是不用,但是断点是存在的。
逐语句调试
n
n可以进行逐语句调试,但是n不能进入函数。
可以看见这里我们是没有进入函数的,直接把函数当成了一个整体,跳到了下一个语句,这里n就等价于vs中的f10.
逐行逐行执行代码(s)
s
这里s是会进入函数的。
可以看见这里来到了Sum函数的时候,s,直接进入函数了。
这里的s就相当于vs中的f11.
调试工具
在他调试的时候,在vs中我们可以调用监视窗口,来方便我们观察某个值的变化,在gdb中也是可以的,但是gdb不是监视窗口了,是直接输出你要监视的值
常显示某值:
display 某值
可以看见显示某个值之后,每次调试一次都会显示这个值
删除常显示:
undisplay 常显示编号
可以删除常显示的数据
如果指向观察一次某值一次可以用下面的命令:
p 某值
在调试的过程中由于我们每次都要去手动显示代码,所以还有一个工具是cgdb
安装:
sudo yum install -y cgdb
这个工具可以可视化显示代码:
这个工具可以把代码显示在上面,然后在下面的终端操作。
总结
通过本文对GDB和CGDB的介绍,可以看出,这两款工具在Linux开发环境中的重要性不言而喻。无论是传统的GDB,还是更加直观和友好的CGDB,它们都能帮助开发者高效地调试代码,定位问题。掌握这些调试工具不仅能大幅提升开发效率,还能帮助开发者更深入理解程序运行机制。希望通过对这些工具的学习,能够让你在今后的开发过程中,调试变得更加得心应手。