当前位置: 首页 > news >正文

【Linux调试工具】gdb/cgdb

在这里插入图片描述

文章目录

  • gdb 简介
    • gdb 的主要功能
  • gdb的用法
    • 如何进入gdb
    • 显示代码
    • 如何运行程序
    • 如何打断点和取消断点
    • 逐语句调试
    • 逐行逐行执行代码(s)
    • 调试工具
  • 总结

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,它们都能帮助开发者高效地调试代码,定位问题。掌握这些调试工具不仅能大幅提升开发效率,还能帮助开发者更深入理解程序运行机制。希望通过对这些工具的学习,能够让你在今后的开发过程中,调试变得更加得心应手。


http://www.mrgr.cn/news/48065.html

相关文章:

  • 计算机视觉目标检测-1
  • Git使用教程-分支使用/合并分支提交
  • PCL-计算点云AABB包围盒
  • C语言项目 天天酷跑(上篇)
  • 多目标跟踪。。
  • Linux 添加磁盘
  • 文件之间的输入输出
  • 在python中如何判断回文串(一)?
  • Linux内核 --内存管理之 Slab 分配器介绍
  • 太速科技-628-基于VU3P的双路100G光纤加速计算卡
  • Docker 入门篇
  • 【前端碎片记录】大文件分片上传
  • 【selenium】webdriver测试脚本
  • 常用的web服务器简述
  • ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。
  • go开发环境设置-安装与交叉编译
  • 【C++进阶】关联式容器map的使用
  • Ubuntu安装Apache教程
  • 排队论:根据λ(到达率)和 μ(服务率)的用户等待时间公式
  • 打开传奇提示connection closed是什么意思?怎么解决?
  • 动态爬虫管理平台构建与实现(论文+源码)_kaic
  • 小米开放式耳机好不好用?小米、南卡、倍思、飞利浦热门开放式耳机一周测评!
  • 工业4G路由R10提升物流仓储效率
  • 【系统架构设计师】案例专题六(8大系统架构设计之1): 信息系统架构设计考点梳理
  • TikTok代理IP哪里找?
  • 数据结构:快排