Linux开发工具gdb篇

news2024/11/24 3:50:34

在这里插入图片描述

文章目录

  • 🎻0.前言
    • 🎼debug版本
    • 🎼release版本
  • 🪕1. gcc/g++的默认版本
  • 🎸2. gdb使用
    • 🎵进入 & 退出
    • 🎵查看代码
    • 🎵断点 & 跳断点
    • 🎵逐过程 & 逐语句
    • 🎵监视
    • 🎵跳出循环 & 结束函数
  • 🥁3. 常见指令

🎻0.前言

🎼debug版本

在我们平时写代码的时候,通常都是使用的debug版本,debug版本是可以进行调试的,它在形成可执行程序的时候,带有调试信息,能够方便我们更好地理解程序运行的情况和找出潜在的问题。

同时也因为带有调试功能,所以版本通常较大。

🎼release版本

release版本是最终发给用户的版本,这个版本会精简和优化代码,提高程序的性能。

因为这所面对的是用户层面,用户只需要使用就行,调试信息对于多数用户来说都是无用的,所以release版本也不包含调试信息。

本篇将讲解Linux环境下的调试,之前有篇文字讲解过Windows环境下的调试:C语言——调试技巧,有兴趣可以点击查看。

🪕1. gcc/g++的默认版本

在Windows的VS2022中,默认的是debug版本image-20230712122942447

而Linux中因为是纯指令,看不到是什么版本,这时候可以用gdb [可执行程序],查看当前程序是什么版本

image-20230712123145628

显式没有调试信息,我们可以可以readelf -S [可执行程序] | grep -i debug查看是否有调试信息

image-20230712123408417

这里也没有看到有调试信息,这就说明,gcc/g++默认编译是以release版本发布的

如果需要已debug方式发布,编译时需要加上-g选项:

image-20230712124041190

🎸2. gdb使用

🎵进入 & 退出

debug方式编译之后,就可以进入调试了。

进入gdb选项:gdb [可执行程序]

退出gdb选项:q

1

🎵查看代码

当进入gdb调试器之后,可以使用l [行号]查看代码

2

gdb会自动记录上一次的指令,我们用了l选项之后,如果还想继续查看,直接回车即可

🎵断点 & 跳断点

打断点可在调试时跳到断点处,进一步所需调试范围。

指令b [行号],就可以在指定的行号打上断点

3

这里也不像在VS中,打一个断点就会有小红点,这里打完断点,我们需要用指令info b来查看当前我们所打的断点

4

从一个断点跳到另一个断点,指令c即可,如果某处有问题,则跳不过来,就说明这个期间有问题,这样就能缩小调试范围

21

我们打的断点会按顺序从1开始编号,如果要删除断点,则删除他们对于编号即可d [编号]

5

同时,如果不想这个断点发货作用,同时也不想将这个断点删掉,就可以使用指令disable [编号]使其失效,要打开就是enable [编号]

image-20230712214544697

🎵逐过程 & 逐语句

r指令开始执行程序,如果有断点,就会运行的接触的第一个断点处停下,然后我们可以选择是逐过程n还是逐语句s往下执行

6

🎵监视

如果要在调试的过程中查看变量的变化或者是递增,使用指令p [目标]display [目标]就能将监视的目标常显示

11

如果这里常显示,前面也是有编号的,如果不想常显示,undisplay [编号]即可取消常显示

12

🎵跳出循环 & 结束函数

在调试时,如果进入了循环,发现问题并不在循环里面,可使用until [行数],跳出当前循环到达我们指定的地方

13

如果进入了函数,并且也发现当前函数没有问题,可使用until [行数]跳出,也可以使用finish跑完该函数

14

🥁3. 常见指令

run(或 r):开始执行程序。

break(或 b):设置断点。可以指定断点的行号或函数名。

continue(或 c):继续执行程序直到下一个断点或程序结束。

next(或 n):执行下一行代码,但是不会进入函数调用。

step(或 s):执行下一行代码,并进入函数调用。

finish:执行当前函数的剩余部分,并返回到函数的调用点。

print(或 p):打印变量的值。可以使用表达式。

backtrace(或 bt):打印函数调用的堆栈跟踪。

info breakpoints(或 info b):列出当前设置的断点。

delete:删除指定的断点。

watch:设置观察点,当变量的值发生变化时暂停程序。

quit(或 q):退出GDB。

以上就是gdb的基本使用方法的,如果条件允许,我还是选择换在Windows环境调试。

那本期的分享就到这里咯,我们下期再见,如果还有下期的话。

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

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

相关文章

Spring Boot 核心运行原理介绍

Spring Boot 核心运行原理介绍 引言整体介绍1. 核心运行原理图2. 自动配置的整体流程3. 各核心功能和组件初步介绍 总结 引言 还记得,笔者在前面的博文《Spring Boot 项目介绍》中提到了,Spring Boot 最核心的功能就是自动配置,该功能的实现…

编辑距离算法(Levenshtein Distance Algorithm)的概念理解及其应用

概念: 编辑距离,由俄罗斯科学家Vladimir Levenshtein于1965年提出,因此又称为Levenshtein Distance,简称LD,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。 可用的编辑操作包括:…

使用docker的常见bug

BUG1:磁盘被占满导致docker无法使用 docker ps 【查看docker能否正常使用】 正常的话会打印下图信息: 不正常的话打印如下图信息: journalctl -u docker 【查看docker无法正常使用的原因】,本次测试中遇到下图bug,意思是/var/l…

短视频抖音seo矩阵源码saas--技术开发部署分享

抖音seo源码开发,抖音矩阵源码,短视频seo源码,短视频矩阵源码技术开发部署,模式采用SaaS形式,用户角色分为:总后台,加盟商,企业用户,角色权限划分清楚,多模式…

简单认识MySQL基础部分

文章目录 一、数据库概述1、简介2、数据库类型和常用数据库1.关系型数据库2.非关系型数据库 3、mysql数据库日志1、作用:2、 mysql与 oracle 日志有所区别3、 Mysql 存储引擎 二、数据库基础操作1、SQL 语句2、实际操作1、DDL:数据定义语言,用…

机器学习技术(五)——特征工程与模型评估

机器学习技术(五)——特征工程与模型评估(2️⃣) 文章目录 机器学习技术(五)——特征工程与模型评估(:two:)二、模型评估1、Accuracy score2、Confusion matrix混淆矩阵1、多值2、二值 3、Hamming loss4、Precision, recall and F…

石英灯和石墨加热器结构热试验装置中的低气压控制解决方案

摘要:为解决结构热试验和热真空试验中的低气压真空压力精密控制问题,本文基于动态平衡法和上下游控制模式,提供了相应的解决方案。解决方案中的低气压真空压力控制系统主要是采用电控针阀、电控球阀和双通道真空压力控制器组成上下游两个闭环…

从源码角度看 Golang 的调度

1.简单概念 1.1 调度器的三个抽象概念:G、M、P G:代表一个 goroutine,每个 goroutine 都有自己独立的栈存放当前的运行内存及状态。可以把一个 G 当做一个任务。M: 代表内核线程(Pthread),它本身就与一个内核线程进行绑定&#…

echarts条形图动态显示

1、实现效果 每次展示5个,轮流展示 2、实现思路 使用datazoom,一次展示5项数据,轮流展示每2s刷新一次。 条形图有两个柱子,一个蓝色柱子,一个灰色柱子,两个柱子重合,且蓝柱子在上面。 为了使左侧的类目和柱…

【ubuntu重装系统后的软件配置_memo】

重装系统后系统环境恢复 备份安装系统常用的一些debvscode 更改sourcespip加速爬长城的家伙式儿安装ROS安装cmake安装git安装zsh顺便开个ssh提升幸福感的映射配置neovimplugins字体插件遇到的问题 锁键盘/鼠标小玩意儿 备份 实验时不起眼的图顺手写的脚本忘记从哪儿下载的资源…

华为云命令行工具服务KooCLI助力一键管理云资源

对于CLI即命令行工具,运维同学可能并不陌生,它摒弃了对图形化界面的需求,不再拘泥于可视化的页面切换、按钮点击等操作,反而为用户提供了一个便捷且高控制的解决方案,使用户在日常的运维工作中,用一行命令即…

【深度学习】目标检测的全面回顾

一、说明 随着自动驾驶汽车、智能视频监控、面部检测和各种人数统计应用的兴起,对快速准确的物体检测系统的需求也在不断增长。这些系统不仅涉及识别和分类图像中的每个对象,还涉及通过在图像周围绘制适当的边界框来定位每个对象。这使得对象检测比其传统…

凸包检测、直线检测、点集拟合、二维码检测

目录 1、凸包检测 2、直线检测 3、点集拟合 4、二维码检测 1、凸包检测 //凸包检测 int test1() {Mat img imread("F:/testMap/hand.png");if (img.empty()){cout << "请确认图像文件名称是否正确" << endl;return -1;}// 二值化Mat gray,…

Splashtop 亮相上安会,助力企业安全远程办公

2023年7月5-7日&#xff0c;2023第二届上海网络安全博览会暨高峰论坛在上海新国际博览中心举办。 本届上安会由上海市信息网络安全管理协会等单位主办&#xff0c;上海科学院、上海汽车集团等机构联合协办。大会围绕数字发展主题&#xff0c;多方位展示了网络安全行业的最新发…

SQL性能规范

一、随聊 记录一下吧&#xff0c;2023年7月13日00:11:11&#xff0c;现在的状态真的很&#xff0c;忙&#xff0c;干不完的活&#xff0c;希望巨大的压力&#xff0c;能够让自己快速成长&#xff0c;回想我这一路&#xff0c;21年大专毕业&#xff0c;用一年时间熟悉软件&…

JDK的安装与配置

所有的开发&#xff0c;第一步必然是准备环境&#xff0c;而JDK提供了一套完整的工具和环境&#xff0c;使开发人员能够编写、编译和运行Java应用程序。是Java开发的基础&#xff0c;为开发者提供了丰富的功能和工具&#xff0c;简化了Java应用程序开发的过程。所以这里就记录一…

C++教程——vector容器、deque容器、stack容器、queue容器、list容器、set容器、map容器

vector容器 基本概念 vector赋值操作 vector容量和大小 vector插入与删除 vector数据存取 vector互换容器 vector预留空间&#xff1a;减少开辟内存空间的次数 deque容器 deque构造函数 deque赋值方式 deque大小操作 deque插入和删除 deque数据存取 deque排序 stack容器 stack…

iOS开发 - 系统自带框架实现扫一扫功能

iOS 扫一扫 利用系统自带框架实现扫一扫功能 一 项目配置 扫一扫功能相机和相册权限&#xff0c;在info.plist中设置询问用户是否允许访问的权限。 info.plist加入NSCameraUsageDescription、NSPhotoLibraryUsageDescription、NSPhotoLibraryAddUsageDescription <key&g…

java.lang.UnsatisfiedLinkError: Could not load SWT library.

java.lang.UnsatisfiedLinkError: Could not load SWT library. https://download.eclipse.org/windowbuilder/lastgoodbuild

力扣206. 反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 链接&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 题解 方法一&#xff1a;类似头插法 设置3个指针cur、next、newhead&#xff0c;其中cur和next指向当前链表头…