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

【Linux】环境基础开发工具的使用之gdb详解(三)

前言:上一篇文章中我们讲解了Linux下的gcc与g++的使用,今天我们将进一步的学习gdbmakefile来帮我们更好的理解与使用基础开发工具。

💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:Linux的深度刨析 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!
在这里插入图片描述


目录标题

  • Linux下基础开发工具
    • gdb调试方法
      • 1.启动gdb
      • 2.查看源代码
      • 3.运行程序
      • 4.设置断点
      • 5.查看断点信息
      • 6.执行下一行代码。
      • 7.查看变量
      • 8.退出gdb


Linux下基础开发工具

gdb调试方法

程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
GDB是一个用于调试程序的强大工具,可以运行在Linux操作系统下。在Linux中,你可以通过以下步骤来安装和使用GDB:

  1. 打开终端。
  2. 输入以下命令以安装GDB:sudo apt-get install gdb(请注意,这需要管理员权限)。
  3. 安装完成后,你可以通过输入gdb命令来启动GDB调试器。
  4. 接下来,你需要指定要调试的可执行文件。例如,如果你要调试一个名为program的程序,可以使用命令gdb program
  5. GDB将会启动并等待你输入调试命令。你可以使用命令run来运行程序,然后使用其他命令来设置断点、查看变量的值等等。

以下是一些常用的GDB命令:

  • listl:查看源代码

  • breakb:设置断点。

  • info breakpoints :显示断点信息

  • runr:运行程序。

  • continuec:继续执行程序。

  • nextn:执行下一行代码。

  • steps:单步执行程序,进入函数调用。

  • printp:打印变量的值。

  • backtracebt:显示函数调用的堆栈跟踪。

  • quitq:退出GDB调试器。

  • display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display n

  • watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch n(查看变量n)

  • whatis :查询变量或函数

  • info function: 查询函数

  • 扩展info locals: 显示当前堆栈页的所有变量

这只是GDB的一些基本用法,GDB提供了很多功能,你可以通过查阅GDB的文档来了解更多详细的使用方法。


1.启动gdb

对于任何一个文件,必须在源代码生成二进制程序的时候, 加上 -g 选项
实例演示
对文件test.c的文件进行调试,调试的文件命名为test:gcc -g test.c -o test
启动gdb,命令如下:(两种方式)

gdb test //启动调试名称为test的文件,但是会显示版本信息
gdb -q test //表示不打印gdb版本信息,界面较为干净;

运行图:
在这里插入图片描述
无版本信息指令:
在这里插入图片描述

2.查看源代码

listl:查看源代码
实例演示:
在这里插入图片描述


3.运行程序

runr:运行程序。
实例演示:
在这里插入图片描述


4.设置断点

breakb:设置断点, b 行号
删除断点:delete break_num
实例演示:
在这里插入图片描述

5.查看断点信息

info breakpoints :显示断点信息
实例演示:
在这里插入图片描述


6.执行下一行代码。

nextn:执行下一行代码。
steps:单步执行程序,进入函数调用。
重复上一条命令:按下回车 。即每一次重复执行上一条指令时,不需要重复输入,只需回车即可。
附:报错”The program is not being run.”
程序没有自动开始运行,此时输入 start 即可开始调试,注意不要使用 run 命令
实例演示:
在这里插入图片描述


7.查看变量

printp:打印变量的值。
实例演示:

在这里插入图片描述


8.退出gdb

quitq:退出GDB调试器。
在这里插入图片描述
这只是GDB的一些基本用法,GDB提供了很多功能,你可以通过查阅GDB的文档来了解更多详细的使用方法。


好啦,今天的内容就到这里啦,下期内容预告make/makefile、进度条的讲解


结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。


🌏🗺️ 这里祝各位寒假愉快 💞💞

相关文章:

【Linux】环境基础开发工具的使用之gdb详解(三)

前言:上一篇文章中我们讲解了Linux下的gcc与g的使用,今天我们将进一步的学习gdb与makefile来帮我们更好的理解与使用基础开发工具。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:Linux的深度刨析 👈 …...

SpringBoot源码解读与原理分析(二十四)IOC容器的刷新(五)

文章目录 7.11 初始化所有剩下的单实例bean对象7.11.1 beanFactory.preInstantiateSingletons7.11.2 getBean7.11.2.1 别名的解析处理7.11.2.2 判断是否已注册过7.11.2.3 创建前的检查7.11.2.4 标记准备创建的bean对象7.11.2.5 合并BeanDefinition7.11.2.6 bean对象的创建7.11.…...

最大子数组和

一、题目 给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#…...

Node.js版本管理工具之_Volta

Node.js包管理工具之_Volta 文章目录 Node.js包管理工具之_Volta1. 官网1. 官网介绍2. 特点1. 快( Fast)2. 可靠(Reliable)3. 普遍( Universal) 2. 下载与安装1. 下载2. 安装3. 查看 3. 使用1. 查看已安装的工具包2. 安装指定的node版本3.切换项目中使用的版本 1. 官网 1. 官网…...

Redis 命令大全

文章目录 启动与连接Key(键)相关命令String(字符串)Hash(哈希)List(列表)Set(集合)Sorted Set(有序集合)其他常见命令HyperLogLog&…...

再这么烂下去,离糊就不远了。别让才华被埋没。

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 近日,胡歌凭借电视剧《繁花》荣登《环球银幕》二月…...

Unity BuffSystem buff系统

Unity BuffSystem buff系统 一、介绍二、buff系统架构三、架构讲解四、框架使用buff数据Json数据以及工具ShowTypeBuffTypeMountTypeBuffOverlapBuffShutDownTypeBuffCalculateType时间和层数这里也不过多说明了如何给生物添加buff 五、总结 一、介绍 现在基本做游戏都会需要些…...

Android rom定制 修改system分区的容量大小

1、写在前面 系统ROM定制化,预置app太多,会导致系统rom很大,原生系统system分区已经不够用了,要加大系统systemui分区 2.修改system分区的容量大小的核心类 device/mediatekprojects/$project/BoardConfig.mk build/make/core/Makefile3、修改system 分区的容量大小的核…...

速盾:服务器接入免备案CDN节点的好处有哪些

本文将探讨服务器接入免备案CDN节点的好处,包括提高网站的访问速度、增加网站的稳定性和可靠性、降低带宽成本等方面的优势。同时,还将提供一些相关问题的解答,帮助读者更好地了解这一技术。 随着互联网的迅猛发展,网站的访问速度…...

Redisson看门狗机制

一、背景 网上redis分布式锁的工具方法,大都满足互斥、防止死锁的特性,有些工具方法会满足可重入特性。如果只满足上述3种特性会有哪些隐患呢?redis分布式锁无法自动续期,比如,一个锁设置了1分钟超时释放,…...

【Java数据结构】双向 不带头 非循环 链表实现(模拟实现LinkedList类)

LinkedList底层实际上是双向、不带头结点、非循环的链表 链表的分类有八种,常用的有两种:一是单向、不带头结点、非循环的(基本上网上的题型都是这种);二是双向、不带头结点、非循环(LinkedList的底层实现…...

深度学习系列55:深度学习加速技术概述

总体有两个方向:模型优化 / 框架优化 1. 模型优化 1.1 量化 最常见的量化方法为线性量化,权重从float32量化为int8,将输入数据映射在[-128,127]的范围内。在 nvdia gpu,x86、arm 和 部分 AI 芯片平台上,均支持 8bit…...

使用python启动一个roslaunch文件

roslaunch 的实现源码主要位于 ROS 的 ros_comm 仓库中的 tools/roslaunch 目录下。源码主要由 Python 脚本和少量的 C 代码组成。 在Python程序中导入roslaunch包并启动一个ROS launch文件,你需要确保ROS环境已经设置好,并且相关的roslaunch包已经安装…...

JavaEE企业级应用软件开发—Spring框架入门学习笔记(一)

一、认识框架 实际开发中,随着业务的发展,软件系统变得越来越复杂,如果所有的软件都从底层功能开始开发,那将是一个漫长而繁琐的过程。此外,团队协作开发时,由于没有统一的调用规范,系统会出现大…...

ElasticSearch-SpringBoot整合ElasticSearch

六、SpringBoot整合ElasticSearch 1、浏览官方文档 1、查找跟ES客户端相关的文档 使用Java REST Client 选择Java Hight Level REST Client 2、创建项目的准备 1.找到原生的依赖 2.找到对象 3.分析这个类里面的方法 3、正式创建项目 1.创建工程 2.导入依赖 注意依赖版本…...

用云手机打造tiktok账号需要注意些什么?

随着tiktok平台的火热,越来越多的商家开始尝试更高效的tiktok运营方法。其中,tiktok云手机作为一种新科技引起了很多人的注意,那么用云手机运营tiktok需要注意些什么?下文将对此进行详细解析。 1. 不是所有的云手机都适合做tiktok…...

MySQL基础查询篇(9)-数学函数在查询中的应用

在MySQL数据库中,数学函数在查询中扮演了非常重要的角色。这些函数可以帮助我们进行各种数学计算和处理,使得我们能够更有效地处理和分析数据。本文将介绍一些常用的MySQL数学函数及其在查询中的应用。 1. ABS函数 ABS函数用于返回一个数值的绝对值。在…...

c#内置委托

C#语言中有许多内置的委托&#xff0c;其中一些是常用的&#xff0c;包括&#xff1a; Action&#xff1a;表示不带返回值的方法的委托。它可以接受多个参数&#xff0c;但不返回任何值。 Action<int, string> actionDelegate (x, y) > Console.WriteLine("Ac…...

【自动化测试】---Selenium+Java

1.自动化测试分类 接口自动化测试UI自动化测试&#xff08;移动端自动化测试、Web端自动化测试&#xff09; 2.选择Selenium作为web自动化工具原因&#xff08;面试题&#xff09; 开源免费支持多个浏览器支持多个系统支持多语言Selenium包提供很多供测试使用的API 3.自动化是什…...

uniapp新增一条数据增加一个折叠栏

//折叠栏 <uni-collapse classcollapse refcollapse><uni-collapse-item v-for"(item, index) in dataForm.beefCattleNums" :key"index" :title"item.fatCalfNum" classcollapse-item title-bordershow :borderfalse clicktoggleItem(…...

Stable Diffusion VAE重构图像效果不理想?可能是你忘了调整这个关键参数

Stable Diffusion VAE图像重构效果优化指南&#xff1a;关键参数解析与实战调整 当你第一次使用Stable Diffusion的VAE&#xff08;Variational Autoencoder&#xff09;进行图像重构时&#xff0c;可能会遇到这样的困惑&#xff1a;明明按照教程一步步操作&#xff0c;为什么输…...

终极指南:如何深度定制webMAN-MOD打造专属PS3游戏管家

终极指南&#xff1a;如何深度定制webMAN-MOD打造专属PS3游戏管家 【免费下载链接】webMAN-MOD Extended services for PS3 console (web server, ftp server, netiso, ntfs, ps3mapi, etc.) 项目地址: https://gitcode.com/gh_mirrors/we/webMAN-MOD 你是否曾为PS3游戏…...

为什么你的Mojo-Python FFI在M1芯片上必崩?苹果Silicon专属ABI陷阱与跨架构符号绑定修复指南(含Clang插件源码)

第一章&#xff1a;为什么你的Mojo-Python FFI在M1芯片上必崩&#xff1f;Mojo-Python FFI&#xff08;Foreign Function Interface&#xff09;在 Apple M1 及后续 ARM64 架构芯片上崩溃&#xff0c;根源并非配置疏忽&#xff0c;而是底层 ABI 不兼容与运行时符号解析机制的双…...

流式清洗新标准:Polars 2.0 Streaming ETL在Kafka-ClickHouse链路中的低延迟落地(端到端<120ms)

第一章&#xff1a;流式清洗新标准&#xff1a;Polars 2.0 Streaming ETL在Kafka-ClickHouse链路中的低延迟落地&#xff08;端到端<120ms&#xff09; Polars 2.0 引入的原生流式执行引擎&#xff08;Streaming Execution Engine&#xff09;彻底重构了传统批式DataFrame处…...

Qwen3.5-35B-A3B-AWQ-4bit镜像技术亮点:服务重启自动恢复+模型热加载+无状态前端设计

Qwen3.5-35B-A3B-AWQ-4bit镜像技术亮点&#xff1a;服务重启自动恢复模型热加载无状态前端设计 1. 平台核心能力介绍 Qwen3.5-35B-A3B-AWQ-4bit是一款专为视觉多模态理解设计的量化模型&#xff0c;它将强大的图文理解能力与高效的部署特性完美结合。这个模型特别适合需要分析…...

Windows 10下5分钟搞定环回适配器安装,轻松连接eNSP模拟器

Windows 10环回适配器极简安装指南&#xff1a;无缝对接eNSP模拟器实战 网络技术学习者和工程师们经常需要在本地搭建实验环境&#xff0c;而环回适配器作为虚拟网络设备的关键组件&#xff0c;能够为eNSP等模拟器提供稳定的连接基础。本文将彻底解决Windows 10环境下环回适配…...

数字图书馆下载工具:高效获取策略与跨平台使用方案

数字图书馆下载工具&#xff1a;高效获取策略与跨平台使用方案 【免费下载链接】internet_archive_downloader A chrome/firefox extension that download books from Internet Archive(archive.org) and HathiTrust Digital Library (hathitrust.org) 项目地址: https://git…...

链式前向星:高效图存储的进阶指南

1. 为什么需要链式前向星&#xff1f; 当你第一次接触图论算法时&#xff0c;可能会被邻接矩阵和邻接表搞得晕头转向。我刚开始学图论的时候&#xff0c;就经常在这两种存储方式之间纠结。邻接矩阵写起来简单&#xff0c;一个二维数组就能搞定&#xff0c;但当节点数超过10000时…...

DeepSeek-OCR开源镜像多场景实践:跨境电商多语言产品说明书自动本地化预处理

DeepSeek-OCR开源镜像多场景实践&#xff1a;跨境电商多语言产品说明书自动本地化预处理 1. 项目背景与价值 跨境电商企业在全球化运营中面临着一个共同挑战&#xff1a;产品说明书的多语言本地化。传统方式需要人工翻译、重新排版设计&#xff0c;整个过程耗时耗力且成本高昂…...

MBPFan技术解析:MacBook在Linux环境下的智能散热控制机制

MBPFan技术解析&#xff1a;MacBook在Linux环境下的智能散热控制机制 【免费下载链接】mbpfan 项目地址: https://gitcode.com/gh_mirrors/mb/mbpfan 在Linux系统上使用MacBook的用户经常面临散热管理的技术挑战&#xff0c;系统原生的温度控制策略往往无法充分发挥苹果…...