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

【Linux】Linux环境基础开发工具使用之Linux调试器-gdb使用

在这里插入图片描述

目录

  • 一、程序发布模式
    • 1.1 debug模式
    • 1.2 release模式
  • 二、默认发布模式
  • 三、gdb的使用
  • 结尾

一、程序发布模式

程序的发布方式有两种,debug模式和release模式

1.1 debug模式

  • 目的:主要用于开发和测试阶段,目的是让开发者能够更容易地调试和跟踪程序中的错误(bugs),以确保软件在发布前无重大错误。
  • 特性
    • 编译时不会进行过多的优化,以便更容易地通过调试工具(如GDB)查看程序的状态,包括变量值、函数调用栈等。
    • 包含详细的调试信息(如符号表),这些信息对于理解程序的行为和定位问题至关重要。
    • 运行时可能包含额外的检查,如数组边界检查、空指针检查等,以帮助捕获潜在的错误。
    • 通常执行速度较慢,因为缺少优化并且增加了额外的调试信息。

1.2 release模式

  • 目的:用于将软件部署到生产环境,目标是提供稳定、高效的运行体验,将软件部署到生产环境,供最终用户使用。
  • 特性
    • 编译时会进行各种优化,如代码重排、循环展开、内联函数等,以提高程序的执行速度和效率。
    • 不包含调试信息(如符号表),以减少可执行文件的大小并提高加载速度。
    • 移除所有运行时检查(如数组边界检查、空指针检查等),以减少运行时开销。
    • 进行了严格的代码检查和测试,以确保程序的稳定性和安全性。
    • 通常执行速度快,因为经过了优化并且去除了不必要的检查。

二、默认发布模式

Linux gcc/g++出来的二进制程序,默认是release模式,在release模式下是无法进行调试的,要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项。

那么要怎么才能证明上面的结论呢?

  1. 首先不带任何选项使用gcc编译Test.c文件生成可执行程序a.out,再使用gdb调试a.out,我们会发现没有调试信息。然后使用gcc带-g选项编译Test.c文件生成可执行程序a.out,再使用gdb调试a.out,会发现没有刚刚那个提示。

    在这里插入图片描述

    在这里插入图片描述

  2. 分别使用gcc以不带选项和带-g选项分别生成可执行程序release版本和debug版本,我们可以发现debug版本的大小比release版本的大,因为debug版本的可执行程序中添加了调试信息

在这里插入图片描述

  1. 我们在Linux中形成的可执行程序的格式为可执行与可链接格式(ELF格式),在Linux中,readelf是一个用于显示ELF文件信息的工具,我们可以使用readelf指令通过管道筛选出调试信息。

    我们发现release版本下并没有调试信息,而debug版本下有调试信息。

在这里插入图片描述


三、gdb的使用

gdb 文件名:进入调试

  • list/l 行号:从输入的换行处显示源文件的源代码,接着上次的位置往下列,每次列10行。若没有输入行号,那么gdb会根据上下文开始显示源代码。
    在这里插入图片描述

  • list/l 函数名:显示函数的源代码。
    在这里插入图片描述

  • break(b) 行号:在某一行设置断点
    在这里插入图片描述

  • break 函数名:在某个函数开头设置断点
    在这里插入图片描述

  • info(i) break(或breakpoints) :查看断点信息。
    在这里插入图片描述

  • disable breakpoints n:禁用序号为n的断点
    在这里插入图片描述

  • enable breakpoints n:启用序号为n的断点
    在这里插入图片描述

  • delete(d) breakpoints n:删除序号为n的断点,断点的序号是线性增长的,只会越来越大,不会因为新添加的断点是前面删除的断点,导致新的断点的序号变为原来的序号。
    在这里插入图片描述

  • delete(d) breakpoints:删除所有断点
    在这里插入图片描述

  • r或run:当没有断点时运行程序,当有断点时运行到断点处。
    在这里插入图片描述

  • n 或 next:单步调试,当使用n命令进行单步调试时,gdb会执行下一行代码。如果下一行代码是一个函数调用,它会将函数调用的结果一次性显示出来,但不会深入到函数内部去逐行执行。
    在这里插入图片描述

  • s或step:单步调试,当使用s命令进行单步调试时,gdb同样会执行下一行代码。但是,如果下一行代码是一个函数调用,s命令会进入这个函数内部,并从函数的第一条语句开始逐行执行。这意。
    在这里插入图片描述

  • finish:执行到当前函数返回,然后挺下来等待命令
    在这里插入图片描述

  • print ( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数
    在这里插入图片描述

  • p 变量:打印变量值。
    在这里插入图片描述

  • set var:修改变量的值
    在这里插入图片描述

  • continue(或c):继续执行被调试的程序,直到遇到下一个断点、程序结束或遇到其他导致程序停止的事件。
    在这里插入图片描述

  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
    在这里插入图片描述

  • undisplay n:取消对序号为n的变量的跟踪
    在这里插入图片描述

  • until :主要作用是继续执行程序,直到当前栈帧(通常是当前函数)的返回点,或者遇到下一个断点。

  • until n:n为某一行代码的行号,该命令会使程序运行至第n行代码处停止。
    在这里插入图片描述

  • breaktrace(或bt):查看各级函数调用及参数
    在这里插入图片描述

  • info (i) locals:查看当前栈帧局部变量的值
    在这里插入图片描述

  • quit (q):退出gdb


结尾

如果有什么建议和疑问,或是有什么错误,大家可以在评论区中提出。
希望大家以后也能和我一起进步!!🌹🌹
如果这篇文章对你有用的话,希望大家给一个三连支持一下!!🌹🌹

在这里插入图片描述

相关文章:

【Linux】Linux环境基础开发工具使用之Linux调试器-gdb使用

目录 一、程序发布模式1.1 debug模式1.2 release模式 二、默认发布模式三、gdb的使用结尾 一、程序发布模式 程序的发布方式有两种,debug模式和release模式 1.1 debug模式 目的:主要用于开发和测试阶段,目的是让开发者能够更容易地调试和跟…...

clickhouse_driver

一、简介 clickhouse_driver是一个Python库,用于与ClickHouse数据库进行交互。ClickHouse是一个高性能的列式数据库管理系统(DBMS),它适用于实时分析(OLAP)场景。clickhouse_driver模块提供了与ClickHouse…...

BI分析实操案例分享:零售企业如何利用BI工具对销售数据进行分析?

在当下这个竞争激烈的零售市场,企业如何在波诡云谲的商场中站稳脚跟,实现销售目标的翻倍增长? 答案可能就藏在那些看似杂乱无章的数字里。 是的,你没有看错,答案正是那些我们日常接触的销售数据。它们就像是宝藏&…...

python : Requests请求库入门使用指南 + 简单爬取豆瓣影评

Requests 是一个用于发送 HTTP 请求的简单易用的 Python 库。它能够处理多种 HTTP 请求方法,如 GET、POST、PUT、DELETE 等,并简化了 HTTP 请求流程。对于想要进行网络爬虫或 API 调用的开发者来说,Requests 是一个非常有用的工具。在今天的博…...

宋红康JVM调优思维导图

文章目录 1. 概述2. JVM监控及诊断命令-命令行篇3. JVM监控及诊断工具-GUI篇4. JVM运行时参数5. 分析GC日志 课程地址 1. 概述 2. JVM监控及诊断命令-命令行篇 3. JVM监控及诊断工具-GUI篇 4. JVM运行时参数 5. 分析GC日志...

linux 网卡配置

linux网卡可以通过命令和配置文件配置,如果是桌面环境还可以通过图形化界面配置. 1.ifconfig(interfaces config)命令方式 通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使用一些选项属性,ifconfig工具不仅可以被用来…...

IEEE |第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)

第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)定于2024年10月18-20日在中国杭州隆重举行。本届会议将主要关注机器学习和计算机应用面临的新的挑战问题和研究方向,着力反映国际机器学习和计算机应用相关技术研究的最新进展。 IEEE |第五届机器学习与计算机应…...

【网络安全】漏洞挖掘:IDOR实例

未经许可,不得转载。 文章目录 正文 正文 某提交系统,可以选择打印或下载passport。 点击Documents > Download后,应用程序将执行 HTTP GET 请求: /production/api/v1/attachment?id4550381&enamemId123888id为文件id&am…...

vue项目执行 cnpm install 报错证书过期的解决方案

拉下源码后执行依赖安装过程,报错 error Error: Certificate has expired,可以通过一下方发解决:npm config set strict-ssl false 再执行 cnpm 命令即可正常拉依赖...

XGboost的安装与使用

安装xgboost: conda install py-xgboost下载demo的数据: https://github.com/dmlc/xgboost 安装graphviz conda install python-graphviz数据 在demo/data里面: 训练集是:agaricus.txt.train、测试集是:agaricus…...

【AI趋势9】开源普惠

关于开源的问题,可以参考我之前的文章: 再说开源软件-CSDN博客 【AI】马斯克说大模型要开源,我们缺的是源代码?(附一图看懂6大开源协议)_分开源和闭源,我们要的当然是开源,马斯克开源。-CSDN博客 一、开…...

【Spark集群部署系列一】Spark local模式介绍和搭建以及使用(内含Linux安装Anaconda)

简介 注意: 在部署spark集群前,请部署好Hadoop集群,jdk8【当然Hadoop集群需要运行在jdk上】,需要注意hadoop,spark的版本,考虑兼容问题。比如hadoop3.0以上的才兼容spark3.0以上的。 下面是Hadoop集群部署…...

泛微OA 常用数据库表

HrmDepartment 人力资源部门 HrmSubCompany 人力资源分部 HrmResource 员工信息表 HrmRoles 角色信息表 T_Condition 报表条件 T_ConditionDetail 报表条件详细值 T_DatacenterUser 基层用户信息 T_FadeBespeak 调查退订表 T_fieldItem 调查项目表输入项信息 T_fieldItemDetail…...

宜佰丰超市进销存管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言: Java 数据库: MySQL 技术: JavaMysql 工具: IDEA/Eclipse、Navicat、Maven 系统展示 首页 管理员功能模块…...

生成Vue脚手架报错:npm error code ETIMEDOUT

遇到 ETIMEDOUT 错误通常表示你的 npm 请求在尝试连接到 npm 仓库(如 https://registry.npmjs.org)时超时了。这个问题通常与网络连接、代理设置或网络配置有关。以下是一些解决这个问题的步骤: 检查网络连接: 确保你的设备可以正…...

Readiness Probe可以解决应用启动慢造成访问异常的问题。

Readiness Probe可以解决应用启动慢造成访问异常的问题。 正确 错误 这句话是正确的。 ‌Readiness Probe确实可以解决应用启动慢造成的访问异常问题。‌ Readiness Probe,也称为就绪性探针,是Kubernetes中用于监控容器应用状态稳定性的重要机制之一。…...

第一批AI原住民开始变现:9岁小学生,用大模型写书赚1个w

前言 当人们正在观望,AI什么时候抢走自己的饭碗时,北京一名9岁的小学生在AI的帮助下写了一本小说,并赚到了2万元的版税。 这件看似不可思议的事,他是如何做到的?此外,他还带来一个启发:面对AI时…...

电路笔记(PCB):串扰的原理与减少串扰的几种方法

串扰 串扰(Crosstalk)是指在电路中,一条信号线上的电磁干扰不经意间耦合到另一条相邻的信号线上,从而影响其正常信号传输的现象。串扰会导致相邻信号线上的信号出现畸变或噪声,从而影响信号的完整性和电路的正常工作。…...

QT-监测文件内容重复工具)

QT-监测文件内容重复工具 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "widget.h" #include "ui_widget.h" #include <QDir> #include <QFile> #include <QCryptographicHash> #include <QApplicatio…...

振兴杯全国青年职业技能大赛信息通信网络线务员解决方案

一、引言 随着数字化时代的到来&#xff0c;信息技术的飞速发展正深刻改变着人们的生活与工作方式。智能楼宇作为这一时代的产物&#xff0c;以其提升生活和工作效率、改善居住和办公环境的特点&#xff0c;受到了广泛关注。智能安防作为智能楼宇的重要组成部分&#xff0c;其…...

Ai音频文件转文字工具 会议音频转文字 录音转文字提取工具 下载

工具基于Ai模型&#xff0c;进行语音音频转文字&#xff0c;进行文字提取&#xff0c;功能强大好用&#xff0c;识别准确率还不错 运行速度取决于音频文件的时长及电脑的性能&#xff0c;音频越长则需要的时间越长&#xff0c;耐心等待即可 使用视频示例如下&#xff1a; Ai语…...

深入理解Spring Boot日志框架与配置

目录 Spring Boot日志框架概述Spring Boot默认日志框架&#xff1a;Logback日志配置文件日志级别的调整日志输出配置日志格式化日志轮转和归档集成其他日志框架日志管理工具最佳实践总结 Spring Boot日志框架概述 Spring Boot 支持多种日志框架&#xff0c;如 Logback、Log4…...

WPF——动态排名图表实现

开发环境 VS2022 .NET 8.0 MVVM Toolkit 8.2.2 需求 开发中需要实现按照成绩动态指名&#xff0c;以展示当前的竞赛成绩的一个实时情况及变化。 即如下效果&#xff1a; 需求分析 按照接收到的信息&#xff0c;就是要将获取到的集合排序&#xff0c;并且要将排序前后的变…...

reactive() 的局限性

reactive() API 有一些局限性&#xff1a; 有限的值类型&#xff1a;它只能用于对象类型 (对象、数组和如 Map、Set 这样的集合类型)。它不能持有如 string、number 或 boolean 这样的原始类型。 不能替换整个对象&#xff1a;由于 Vue 的响应式跟踪是通过属性访问实现的&…...

stm32f407vet6驱动3.2寸lcd(9341 FSMC hal)

最近在钻研一些显示屏&#xff0c;研究到了lcd显示屏&#xff0c;然后入手了一块f407的开发板,但是店家给的资料有点怪&#xff0c;是keil4的工程,我一打开显示缺少f407vexxx&#xff0c;keil现在还巨慢&#xff0c;然后我到处找资料&#xff0c;发现网上大多是vgt6,又去各家ve…...

替换后的最长重复字符(LeetCode)

题目 给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符&#xff0c;并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后&#xff0c;返回 包含相同字母的最长子字符串的长度。 解题 def characterReplacement(s, k):count {}max_len…...

[sqlserver][sql]sqlserver查询表信息和字段信息

--查询一个表中的所有字段 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAMEzsyh_AccInfo --查询一个库下的所有表 select * from sysobjects where xtypeU --查询一个数据库下的所有字段 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME in(select nam…...

easypoi模板导出word并且合并行

导出流程 引入依赖制作模板合并导出 引入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.2</version> </dependency>制作模板 合并行是备注那一列&#xff0c;这一列…...

雨云美国二区E5v2服务器测评(非广告)

注&#xff1a;本文非广告&#xff0c;非推广 本文长期更新地址&#xff1a; 雨云美国二区E5v2服务器测评&#xff08;非广告&#xff09;-星零岁的博客https://blog.0xwl.com/13594.html 今天来测评一下雨云美国二区v2服务器。我测试的这台配置是4-8&#xff0c; 35 M上传&a…...

前端form表单post请求

前端请求post&#xff0c;以表单的形式&#xff0c;后端传来的str,就是url携带的参数 const form document.createElement(form); form.style.display none; form.setAttribute(target, _blank); form.setAttribute(method, post); form.setAttribute(action,url); var vars …...

西安博网站建设/湖北seo推广

#!/usr/bin/env python #在环境变量env中找Python#coding: utf81.自动补全配置环境&#xff1a; 创建以下文件vim /usr/local/bin/tab.py输入&#xff1a;import readlineimport rlcompleterreadline.parse_and_bind(tab:complete)存储后设置 SPYTHONSTARTUPvim ~/.bash_profil…...

做映射后 内网无法通过域名访问网站/seo的形式有哪些

题意&#xff1a;学生和课程构成二部图&#xff0c;然后需要找到一个集合每个学生代表一门课&#xff0c;每一门课有一个学生代表。 思路&#xff1a;二分图入门题。当最大匹配等于课程数的时候可以找到集合。 代码如下&#xff1a; 1 /**************************************…...

做网站的人是什么职位/全球疫情最新数据

案例一 导入图片思路: 1.导入库 2.加载图片 3.创建窗口 4.显示图片 5.暂停窗口 6.关闭窗口# 1.导入库import cv2# 2.加载图片img cv2.imread(a.png)# 3.创建窗口cv2.namedWindow(window 1 haha)# 4.显示图片cv2.imshow(window 1,img)# 5.暂停窗口cv2.waitKey(0)# 6.关闭窗口cv…...

做一元购网站 要多少钱/百度双十一活动

mysql 安装双击d:\websoft\mysql-essential-5.1.63-win32.msi 就开始安装了 看图操作出现上面的界面&#xff0c;不要点cancel 那是取消&#xff0c; 等等选择“custom”然后点“next” 出现下面的界面这个是选择mysql 安装的位置&#xff0c;默认在c盘&#xff0c;我们点“cha…...

玉环市建设工程检测中心网站/网络营销主要有哪些特点

单行注释&#xff1a; CTRL / 当行取消注释&#xff08;一样的&#xff09;&#xff1a; CTRL / 多行注释&#xff1a; CTRL SHIFT / 多行取消注释&#xff08;斜杠换成反斜杠&#xff09;&#xff1a; CTRL SHIFT \ 转载于:https://www.cnblogs.com/lijins/p/100994…...

怎么用ai做企业网站框架/网络推广用什么软件好

合金体系的势函数除了eam势&#xff0c;还有meam势。在新版本的lammps中&#xff0c;meam势类型已经改为meam/c&#xff0c;本文主要介绍meam/c势的设置方法。 和普通的势函数文件不同&#xff0c;meam/c势有两个势函数文件&#xff1a;library.meam和**.meam&#xff0c;**表示…...