【Linux调试工具】gdb/cgdb

news2024/12/28 3:38:24

在这里插入图片描述

文章目录

  • 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.coloradmin.cn/o/2205655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字隔离器的技术竞争

长期以来,光耦合器一直被人们信赖,因为它能够在电路的不同部分之间提供电气隔离,确保信号的安全传输,同时保护元件免受高压影响。然而,近年来,数字隔离器已成为一种强大的替代品,在速度、寿命和…

Map的实现类:TreeMap

1.存储结构:红黑树 2.实现了SortedMap接口(是Map的子接口),可以对key自动排序。 3.实例代码:Student类和Demo03 如果出现类转换异常 参考【TreeSet(红黑树)】 package com.map;import java…

苍穹外卖P19--异常处理

以上传数据库数据重复为例,进行异常处理。 接口文档报错: 重新启动:

Arduino中使用PS2手柄

目录 1、PS2手柄介绍 2、PS2库文件添加 3、Auduino代码 4、测试 5、测试程序和库文件下载连接 1、PS2手柄介绍 PS2手柄介绍见下面博客 STM32中使用PS2手柄_stm32 ps2-CSDN博客 PS2手柄按钮分布 2、PS2库文件添加 库文件和测试程序一起打包提供下载 3、Auduino代码 #in…

【数据结构】二叉堆一文详解,附demo

有时候也挺迷惑的,技术那么多,感觉学什么都来不及,又什么都得学,经常一看别人,哇,比你年轻比你厉害,然后自己emo一下又要鸡血模式,就挺无语的,但愿我们的坚持与努力都不白…

“炫我”受邀出席虚拟现实及元宇宙产业创新论坛!

当前,新一轮科技革命和产业变革向纵深演进,虚拟现实及元宇宙等相关产业加速发展,催生了新产业新业态新模式,发展潜力巨大、应用前景广阔。 9月27日,由北京市科学技术委员会、中关村科技园区管理委员会,北京…

攻防世界1

pwnstack 发现是64位文件 发现vuln双击进入 看到read知道这里是要将B1(177)的数据输入buf,这里涉及了栈溢出 发现system和binsh 后门 A8十进制是168 exp: from pwn import * context(oslinux,archamd64,log_leveldebug) io rem…

生产及质量BI应用场景方案(可编辑37页PPT)

荐言分享:随着全球化的深入发展,制造业面临的竞争日益激烈。为了在市场中脱颖而出,企业需要不断提升自身的生产效率、降低成本,同时保证产品质量。现代消费者的需求日益多样化,对产品的个性化、定制化和品质要求越来越…

【unity踩坑】打开vs2022没有文字联想/杂项文件

unity打开vs2022没有文字联想 修改外置编辑器安装unity开发插件vs编辑器显示杂项文件 修改外置编辑器安装unity开发插件 参考 在unity项目里选择Edit-> Preferences->External Tools然后更换编辑器 在vs工具界面添加unity游戏开发选项。 重新打开还是有问题&#xff…

记录搜罗到的Matlab 对散点进行椭圆拟合

需要基于一些散点拟合椭圆估计并计算出椭圆的参数和周长,搜罗到直接上代码 (1)有用的椭圆拟合及参数计算函数 function W fitellipse(x,y) % 构造矩阵 D [x.*x, x.*y, y.*y, x, y,ones(size(x))]; S D*D; G zeros(6); G(1,3) 2; G(3,1)…

深入探讨B+树索引的基本概念、工作原理以及在MySQL中的应用

文章目录 1. B树的基本概念2. B树在MySQL中的实现3. 示例代码4. 结论 在数据库管理系统中,索引是一种特殊的文件,它能够提高数据检索的速度。MySQL作为最流行的开源关系型数据库之一,提供了多种索引类型来满足不同的性能需求。其中&#xff0…

windows端口被占用但是查不到进程的问题排查

在开发环境上经常遇到端口被占用,但是 netstat -ano|findstr 3306 查不到进程号,没法强杀解决。 这种情况,很有可能端口被排除了,可用命令: netsh interface ipv4 show excludedportrange protocoltcp 可以看到mysql的…

web-前置技能(HTTP协议)-CTFHub

前言 在众多的ctf平台当中,作者认为ctfhub对于初学者来说,是入门平台的不二之选。ctfhub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。 作者正在更新ctfhub系列,希望小伙伴们多多支…

多元线性回归:机器学习中的经典模型探讨

引言 多元线性回归是统计学和机器学习中广泛应用的一种回归分析方法。它通过分析多个自变量与因变量之间的关系,帮助我们理解和预测数据的行为。本文将深入探讨多元线性回归的理论背景、数学原理、模型构建、技术细节及其实际应用。 一、多元线性回归的背景与发展…

小米开放式耳机好不好用?小米、南卡、倍思、飞利浦热门开放式耳机一周测评!

​开放式耳机正成为潮流,它们不仅佩戴舒适,音质也出色,特别受到音乐发烧友和运动爱好者的追捧。作为一名多年的数码测评博主,我也早就对开放式耳机感兴趣了,只是最近一直没时间来好好测评下,今天一下子买了…

计算机网络实验二:FTP服务器配置

ftp服务器配置 要求: 1. 学会配置FTP服务器、能在FTP客户端进行下载和上传文件 2. 进一步熟悉ipconfig和ping命令 3. 进一步理解FTP工作原理和流程 1、FTP服务器配置(FileZilla Server) 第一步安装FileZilla Server,直接下一步…

二、安装vmtools

1、 介绍 vmtools 安装后,可以让我们在 windows 下更好的管理 vm 虚拟机。可以设置 windows 和 centos 的共享文件夹 当时当我们发现安装虚拟机工具位置是灰色的 右击打开终端 在终端输入命令 yum list installed | grep open-vm-*yum list installed 命令会列出…

TikTok代理IP哪里找?

对于那些希望通过社交媒体打造个人品牌的人来说,TikTok是现在热门的平台,他的流量与曝光不可小觑,相信很多跨境营销会选择他进行多账号营销。问题是,TikTok多账号很容易遇到封禁问题,那么如何解决? 一、什么…

如何查看1688阿里巴巴热销选品数据?

✅路径:店雷达选品中心—1688选品库—选择类目 选品前先选类目,初步定位符合自己产品方向后再去分析市场,想看全市场的品类就选择一级类目,也有二三级类目细分选择,根据商家经营目标而定 接着选择想看的市场统计周期&…

吸毛效果好的宠物空气净化器分享,希喂、霍尼韦尔、米家实测

说起宠物空气净化器,几年前我可能会一脸鄙夷:为啥要花这种智商税冤枉钱? 直到之前养了一只猫,被家中乱飞的浮毛和滂臭的异味搞到头晕,于是作为i一个养宠的家电测评博主,索性对宠物空气净化器这玩意做了超级…