前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux调试工具】gdb/cgdb

【Linux调试工具】gdb/cgdb

作者头像
用户11305458
发布2024-10-12 12:04:10
1160
发布2024-10-12 12:04:10
举报
文章被收录于专栏:学习

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可以通过下面命令进行下载:

代码语言:javascript
复制
sudo yum install -y gdb

如何进入gdb

代码语言:javascript
复制
gdb 需要调试的程序

这里我们已经进入了gdb的调试模式。

显示代码

代码语言:javascript
复制
l 需要显示的信息

l是list的简称可以表示罗列

比如这里我用l 1就表示显示1到10行的代码

l 15的时候显示的信息不是15到25行,而是15在中间。 不仅可以这样使用还可以像这样:

显示main函数。

如何运行程序

代码语言:javascript
复制
r

r在没有断点的情况下是直接运行程序,如果有断点就会直接跳到第一个断点处。

可以看见,我们这里没有任何断点,没有任何断点,

可以看见r之后程序直接跑起来了。

如何打断点和取消断点

打断点:

代码语言:javascript
复制
b 需要打断点行数/某个函数

两种打断点的方式,第一种是将断点打在某一行上,第二种是将断点打在某个函数上。

取消断点:

代码语言:javascript
复制
d 断点编号

注意:这里d后面加的是断点编号,而不是断点的行数 展示断点信息:

代码语言:javascript
复制
info b

==注意:断点有三种状态,已经谈过了删除状态,接下来来说一下禁用状态和使能状态。

这一栏表示的是状态,n表示的禁用状态,y表示的是使能状态。 设置状态对应的是disable和enable分别对应的是禁用和使能状态。

设置状态:

代码语言:javascript
复制
enable/disable 断点编号

可以看见disable可以将断点设置为禁用状态,禁用状态和删除状态不一样,禁用状态只是不用,但是断点是存在的。

逐语句调试

代码语言:javascript
复制
n

n可以进行逐语句调试,但是n不能进入函数。

可以看见这里我们是没有进入函数的,直接把函数当成了一个整体,跳到了下一个语句,这里n就等价于vs中的f10.

逐行逐行执行代码(s)

代码语言:javascript
复制
s

这里s是会进入函数的。

可以看见这里来到了Sum函数的时候,s,直接进入函数了。 这里的s就相当于vs中的f11.

调试工具

在他调试的时候,在vs中我们可以调用监视窗口,来方便我们观察某个值的变化,在gdb中也是可以的,但是gdb不是监视窗口了,是直接输出你要监视的值 常显示某值:

代码语言:javascript
复制
display 某值

可以看见显示某个值之后,每次调试一次都会显示这个值

删除常显示:

代码语言:javascript
复制
undisplay 常显示编号

可以删除常显示的数据 如果指向观察一次某值一次可以用下面的命令:

代码语言:javascript
复制
p 某值

在调试的过程中由于我们每次都要去手动显示代码,所以还有一个工具是cgdb 安装:

代码语言:javascript
复制
sudo yum install -y cgdb

这个工具可以可视化显示代码:

这个工具可以把代码显示在上面,然后在下面的终端操作。

总结

通过本文对GDB和CGDB的介绍,可以看出,这两款工具在Linux开发环境中的重要性不言而喻。无论是传统的GDB,还是更加直观和友好的CGDB,它们都能帮助开发者高效地调试代码,定位问题。掌握这些调试工具不仅能大幅提升开发效率,还能帮助开发者更深入理解程序运行机制。希望通过对这些工具的学习,能够让你在今后的开发过程中,调试变得更加得心应手。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • gdb 简介
    • gdb 的主要功能
    • gdb的用法
      • 如何进入gdb
        • 显示代码
          • 如何运行程序
            • 如何打断点和取消断点
              • 逐语句调试
                • 逐行逐行执行代码(s)
                  • 调试工具
                  • 总结
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档