『Linux升级路』基础开发工具——gdb篇

🔥博客主页:小王又困了

📚系列专栏:Linux

🌟人之为学,不日近则日退

❤️感谢大家点赞👍收藏⭐评论✍️

目录

一、背景知识介绍

二、gdb指令介绍


一、背景知识介绍

     在软件开发中,通常会有两种主要的构建配置:Debug(调试)和Release(发布)。这两种配置的存在是为了在不同的开发和使用阶段提供不同的优化和调试支持。以下是它们存在的主要原因:

📝调试配置:

  • 符号信息: Debug 配置通常包含完整的符号信息,这使得在调试过程中能够准确地追踪到源代码的行号和调用堆栈信息。这对于开发人员在调试应用程序时非常重要。
  • 优化程度低: Debug 配置一般不进行代码优化,以确保生成的代码更易于调试。变量和表达式的值通常保留在内存中,而不进行过多的优化操作。

📝发布配置:

  • 符号信息: Release 配置通常会剔除符号信息,减小可执行文件的大小,并防止未经授权的人员通过符号信息获取源代码的详细信息。
  • 优化成程度高: Release 配置通常会进行更多的代码优化,以提高应用程序的性能。这包括删除不必要的代码、内联函数、变量寄存器优化等。

gcc/g++编译器默认是以release的模式编译得到可执行程序,我们使用gdb是无法进行调试的。

想进行代码调试,我们就要让代码以debug的模式发布,需要加-g选项。

gcc code.c -o mycode -g

我们可以通过readelf mycode-d -S | grep debug查看mydoe-d文件中的debug信息

二、gdb指令介绍

     我会通过下面这段代码,来给大家演示gdb的使用。

#include <stdio.h>
int Add(int n)
{
    int ret=0;
    int i=0;
    for(i=0;i<n;i++)
    {
        ret+=i;
    }
    return ret;
}

int main()
{
    int num=50;
    int sum=Add(num);
    printf("%d\n",sum);
    return 0;
}

📒进入gdb环境

  • gdb binFile:进入gdb环境,binFile是一个可执行程序。

📒退出gdb环境:

  • ctrl + d quit :退出gdb环境

📒显示代码:

  •  list l :显示binFile源代码,接着上次的位置往下列,每次列10行。

  • list numnum是行号,将源代码的第num行在中间位置显示。

gdb会自动记录上一次执行的指令,我们执行一次 list 后,可以直接回车,就可以看到完整的源代码。

📒查看函数:

  • list Func l FuncFunc是函数名,列出某个函数的源代码。

📒运行程序:

  • run r 运行程序,不是单步执行程序。

📒设置断点:

  • break numb num:num表示行号,在某行设置断点。

📒查看断点:

  • info break:查看断点信息。

📒删除断点:

  • d numnum表示断点的编号,删除断点。

我们在删除断点时,这里的num表示的不是行号,我们要输入要删除断点的编号。

注意:如果在调试过程中退出,那么再次进入调试环境,上一次的调试信息会丢失,即之前设置的断点都没了。

📒单步执行:

  •  n next:逐过程,单条执行,当有函数调用时,不会进入函数内部。
  •  s step:逐语句,进入函数调用。
  • finish:跳出当前函数,执行完当前函数返回,然后停下来等待命令。

flish指令可以快速的帮我们查看问题是不是出在当前函数中。 

📒查看变量的值:

  •  p 变量:打印变量的值。
  • display 变量:跟踪查看一个变量,每次停下来都显示它的值。

  • undisplay num:取消对先前设置的那些变量的追踪,其中num是先前设置的跟踪变量所对应的编号。 
  • info locals:查看当前函数栈帧中所有局部变量的值。

📒其他指令:

  • until x:跳至x行,可以让我们快速的运行代码块。
  •  c continue:继续执行直到下一个断点。
  • disable breakpoints:禁用断点。
  • enable breakpoints:启用断点
  • break 函数名:在函数开头设置断点。
  • backtrace:查看堆栈。
  • set var:修改变量的值。
  • break filename:line_number:在文件的特定行设置断点。示例:
b code.c:15

code.c这个源文件的第15行设置断点。


🎁结语: 

     本次的内容到这里就结束啦。希望大家阅读完可以有所收获,同时也感谢各位读者三连支持。文章有问题可以在评论区留言,博主一定认真认真修改,以后写出更好的文章。你们的支持就是博主最大的动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/262618.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

不要再浪费时间,一键获取SolidWorks,设计革命由此开始!

不要再在网上浪费时间寻找SolidWorks的安装包了&#xff0c;一键下载安装&#xff0c;你要的一切都可以在这里找到&#xff01; 对于3D建模和计算机辅助设计的人来说&#xff0c;SolidWorks是一个不可或缺的工具。然而&#xff0c;在网上寻找合法且可靠的软件安装包却常常让人…

「工业遥测」图表控件LightningChart在水工业中的应用

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

nuxt打包占用磁盘IO

目录 前言排除过程 前言 jenkins运行打包&#xff0c;总是要卡一段时间&#xff0c;磁盘IO很高。我手动执行后的确发现了这个问题&#xff0c;如下图所示。 排除过程 我的方案很原始&#xff0c;利用git恢复到以前的版本&#xff0c;抽检&#xff0c;搞了差不多两个小时&am…

es、MySQL 深度分页问题

文章目录 es 深度分页MySQL 深度分页 es 深度分页 es 深度分页问题&#xff0c;有点忘记了&#xff0c;这里记录一下 当索引库中有10w条数据&#xff0c;比如是商品数据&#xff1b;用户就是要查在1w到后10条数据&#xff0c;怎么查询。 es查询是从各个分片中取出前1w到后10条数…

【SpringBoot篇】解决缓存击穿问题① — 基于互斥锁方式

文章目录 &#x1f339;什么是缓存击穿&#x1f33a;基于互斥锁解决问题&#x1f6f8;思路 &#x1f3f3;️‍&#x1f308;代码实现 &#x1f339;什么是缓存击穿 缓存击穿是指在使用缓存系统时&#xff0c;对一个热点数据的高并发请求导致缓存失效&#xff0c;多个请求同时访…

JavaOOP篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、构造方法能不能显式调用?二、什么是方法重载?三、构造方法能不能重写?能不能重载?四、内部类与静态内部类的区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,…

软件工程快速复习(期末急救)

每个同学要假想自己是一个项目经理&#xff0c;去完成一个软件项目&#xff0c;比如医院管理系统&#xff0c;自动设备控制系统等&#xff0c;以面向结构的软件工程方法&#xff0c;说出完成项目的步骤&#xff0c;涉及到的具体技术。初步了解面向对象的方法的与面向结构的方法…

“VR全景+”理念下的智慧教育,让VR教学成为趋势

随着VR技术的发展&#xff0c;“VR全景”理念下的智慧教育&#xff0c;从智慧学习环境和新型教学模式两个方面来促进教育进一步革新。VR技术应用在教育领域&#xff0c;对于教学来说是一个飞跃的发展&#xff0c;5G课堂、VR直播教学、沉浸式教学等教学模式的创新&#xff0c;让…

安装@vue/cli时候,升级版本造成冲突的解决方法

问题&#xff1a;原来是2.X版本&#xff0c;想要升级到4.5.9版本就出错了 npm install -g vue/cli4.5.9错误原因&#xff1a;之前安装过vue的2.X版本&#xff0c;导致冲突的文件没有被正确删除 解决方法&#xff1a;安装且覆盖原来存在的文件 npm install -g vue/cli4.5.9 -…

【工具与中间件】通过飞书应用操作云文档

文章目录 前言1. 准备工作1.1 创建应用1.2 创建文件夹 2. 测试租户/个人版实践2.1 权限配置2.2 控制台调试2.3 协作文档添加应用2.4 CRUD2.4.1 根据文档描述选择token并生成2.4.2 新增多维表格数据API2.4.3 删除多维表格数据API2.4.4 查询多维表格数据API2.4.5 修改多维表格数据…

AIGC绘画Midjourney风格关键词和场景关键词

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

[SWPUCTF 2021 新生赛]Do_you_know_http已

打开环境 它说用WLLM浏览器打开&#xff0c;使用BP抓包&#xff0c;发送到重发器 修改User-Agent 下一步&#xff0c;访问a.php 这儿他说添加一个本地地址&#xff0c;它给了一个183.224.40.160&#xff0c;我用了发现没用&#xff0c;然后重新添加一个地址&#xff1a;X-Forwa…

AI数字人互动大屏支持多种场景交互!

互动大屏&#xff08;技术支持&#xff1a;zhibo175&#xff09;本身具有令人瞩目的效果&#xff0c;再配置丰富多彩的多媒体&#xff0c;如引人注目的广告、特效或游戏等&#xff0c;可起到很好的引流作用。在空间开阔且客流密集的场所&#xff0c;使用各种形态的大面积屏幕&a…

Win10安装Gogs保姆级教程

什么是 Gogs? Gogs 是一款极易搭建的自助 Git 服务。 开发目的 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发&#xff0c;并且支持 Go 语言支持的 所有平台&#xff0c;包括 Linux、Mac OS X…

音视频直播核心技术

直播流程 采集&#xff1a; 是视频直播开始的第一个环节&#xff0c;用户可以通过不同的终端采集视频&#xff0c;比如 iOS、Android、Mac、Windows 等。 前处理&#xff1a;主要就是美颜美型技术&#xff0c;以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。 编码&#…

C++11特性:共享智能指针

在C中没有垃圾回收机制&#xff0c;必须自己释放分配的内存&#xff0c;否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针&#xff08;smart pointer&#xff09;。智能指针是存储指向动态分配&#xff08;堆&#xff09;对象指针的类&#xff0c;用于生存期的控…

2. 创建型模式 - 抽象工厂模式

亦称&#xff1a; Abstract Factory 意图 抽象工厂模式是一种创建型设计模式&#xff0c; 它能创建一系列相关的对象&#xff0c; 而无需指定其具体类。 问题 假设你正在开发一款家具商店模拟器。 你的代码中包括一些类&#xff0c; 用于表示&#xff1a; 一系列相关产品&…

【单调栈】LeetCode2334:元素值大于变化阈值的子数组

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调栈 题目 给你一个整数数组 nums 和一个整数 threshold 。 找到长度为 k 的 nums 子数组&#xff0c;满足数组中 每个 元素都 大于 threshold / k 。 请你返回满足要求的 任意 子数组的 大小 。如果没有这…

Java对接腾讯多人音视频房间回调接口示例

在前面我们已经对接好了腾讯多人音视频房间相关内容&#xff1a;Java对接腾讯多人音视频房间示例 为了完善业务逻辑&#xff0c;我们还需要对接它的一些回调接口 官方文档地址 主要就下面这些 这里因为比较简单直接上代码 里面有些工具类和上一章一样这里就没贴&#xff0c;需要…

2023 英特尔On技术创新大会直播 | AI魅力的生活化

目录 前言正文 前言 依稀记得去年的直播大会&#xff0c;主要展现了其灵活、加速和半集成化的独特优势&#xff0c;广泛应用于人工智能、5G通信、边缘计算以及视觉图像处理等领域&#xff0c;不断提供领先的性能、能效和可编程性的创新。 如今又带来一些不一样的特色&#xf…