【Linux调试工具】gdb/cgdb

在这里插入图片描述

gdb 简介

GDB(GNU Debugger)是GNU项目中的一款强大的调试工具,广泛应用于调试C、C++等语言编写的程序。它可以帮助开发者在程序运行时跟踪执行流程、设置断点、查看变量值、检测错误等,大大提高了调试效率。

gdb 的主要功能

  1. 启动程序:在调试模式下运行程序,方便跟踪。
  2. 设置断点:允许在程序的特定位置暂停执行,以便检查程序状态。
  3. 单步执行:逐行执行代码,观察每一行的影响。
  4. 查看变量和内存:实时查看程序中的变量值及内存地址等内容。
  5. 调试多线程程序:支持调试多线程环境下的程序。
  6. 分析崩溃:通过分析崩溃时生成的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,它们都能帮助开发者高效地调试代码,定位问题。掌握这些调试工具不仅能大幅提升开发效率,还能帮助开发者更深入理解程序运行机制。希望通过对这些工具的学习,能够让你在今后的开发过程中,调试变得更加得心应手。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值