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

【Linux】-关于调试器gdb的介绍和使用

作者:小树苗渴望变成参天大树
作者宣言:认真写好每一篇博客
作者gitee:gitee
在这里插入图片描述
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!

文章目录

  • 前言
  • 一、Linux中的debug和release
  • 二、gdb的使用
    • ==**1.进入调试**==
    • ==**2.显示代码**==
    • ==**3.执行和断点**==
    • ==**4.逐语句和逐过程**==
    • ==**5.显示变量**==
    • ==6.断点之间的执行==
    • ==7.启动断点和禁用断点==
  • 三、总结


前言

这篇讲给大家介绍关于Linux中的调试,它和vs的操作思想是一样的,帮助我们调试代码,所以关于一些调试名词的大家是知道的,这篇的指令选项特别多,大家下来要好好练习,不然很容易忘,在vs讲调试之前,我们也介绍过关于debug和release的介绍,在Linux上也有着两个版本,我们话不多说,开始进入正文


一、Linux中的debug和release

在Linux上,我们gcc/g++默认生成的是动态的release版本的可执行程序,我们使用 -g 选项就可以使可执行程序变成debug版本的,这样才有调试信息。
在这里插入图片描述

我们看到debug版本的可执行程序比release版本的体积要大些,因为增加了调试信息。

我们来使用一个readelf指令来看看生成的文件是否有debug调试信息
在这里插入图片描述
我们在平时写代码的时候加一个-g生成debug版本才能进行调试。这篇我的可执行程序都是debug版本的。接下来开始正式介绍gdb调试器

二、gdb的使用

在讲解这个之前,我希望大家看看我之前这篇博客写关于vs上的调试vs上的调试技巧,接下来的一些名词我就不具体给大家介绍了,我对标vs上的调试给大家讲解,接下来我们先把准备工作做好。写一个程序,把自动化构建写好,在vs上准备一份相同的代码,方便做对比:
在这里插入图片描述

1.进入调试

gdb+可执行程序

在这里插入图片描述

此时你就进入调试,相当于vs的CTRL+F10

2.显示代码

我们进入调试之后,是看不见代码的,所以我们要将其显示出来,使用l指令
在这里插入图片描述

l默认从随机位置开始每次显示10行直到显示结束,想要从第一行开始展示输入指令l 0从第一行开始显示:
在这里插入图片描述

注意:gdb会记录上一条的命令,如果你下一条想要执行相同的命令,就可以直接回车就好了

3.执行和断点

断点是我们调试一个重点的东西,它可以不让我们从第一行开始调试,直接跳到想要行开始调试。
(1) 设置断点b+行号
在这里插入图片描述
(2)显示断点info b
在这里插入图片描述
这个显示也可以直接把你的断点编号显示出来,最后显示的是第几行断点
(3)删除断点d+编号
在这里插入图片描述

我们不能通过行号删除断点,只有通过编号才能删除断点

(4)开始调试
我们刚才进入调试,还没有开始调试,输入r开始调试。

在没有断点的情况下,这个指令就相当于运行程序,并不会像vs上停在main函数的入口:
在这里插入图片描述
在有断点的情况下,会跳到最近的断点处
在这里插入图片描述

4.逐语句和逐过程

这个是调试的关键步骤,我们的逐语句是一条一条语句的的执行,逐过程是一次执行一个过程,不会进入函数体内

(1)逐过程n会跳到下一个过程,有空格也会跳过
在这里插入图片描述
(2)逐语句s进入函数内部
在这里插入图片描述

当你正在调试的时候,像重新调试,就再次输入r,从头开始调试

在这里插入图片描述
(3)查看函数堆栈bt
在这里插入图片描述

(4)快速结束此次函数的运行finish
这个在vs上是没有的,如果你刚进入函数体内,就像出来,就使用Finnish命令:
在这里插入图片描述
(5)函数体内跳到指定行until+行号
在这里插入图片描述

这个也是vs上没有的,但是这个命令只建议在函数体内使用,不建议从另一个函数跳到另一个函数。

5.显示变量

(1)调试的一个重要环节就是查看你想要的变量值,看看和你想的有什么变化
我们使用p+变量命令
在这里插入图片描述
但是我们在vs上的变量是一直可以看到的,不是像现在每次都要输入指令才能看到,而且没有显示变量名,所以我们接下来要使用常显示命令display+变量
在这里插入图片描述

虽然没有vs上看到直观,这也是命令行的缺点

(2)删除变量undispaly+编号
在这里插入图片描述

这个和删除断点一下,需要通过编号来进行删除

6.断点之间的执行

在vs上我们打两个以上断点,通过F5就可以进行断点之间的执行
在这里插入图片描述
在gdb中可以使用c来进行断点之间的执行
在这里插入图片描述

7.启动断点和禁用断点

在这里插入图片描述

禁用断点就是是此断点失能,但是断点还在,我们来看看gdb上的是什么样的

禁用断点disable+编号
在这里插入图片描述
启动断点enable+编号

在这里插入图片描述

三、总结

大家对于gdb的命令了解我今天所讲的这些就行了,大家下来孰能生巧就好,就好比vs上的调试没有什么难度,要多用,就会了,今天博主的分享就到这里了,我们下篇再见
在这里插入图片描述

相关文章:

【Linux】-关于调试器gdb的介绍和使用

作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 文章目录 前言一、Linux中的debug和release二、gdb的使用**1.进入调试****2.显示代码*…...

项目开发经验

hadoop 1.namenode中有专门的工作线程池用于处理与datanode的心跳信号 dfs.namenode.handler.count20 * log2(Clust 2.编辑日志存储路径 dfs.namenode.edits.dir 设置与镜像文件存储路径 dfs.namenode分开存放,可以达到提高并发 3.yarn参数调优,单个服…...

STM32——05-按键、时钟控制、中断复位 点亮LED灯

如何点亮一颗LED灯 编程实现点灯 常用的 GPIO HAL 库函数: void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_Togg…...

VBA下载二进制文件,文本读写

这里使用了vba如下两个对象: Microsoft.XMLHTTP:文件读写,可读写二进制,可指定编码,对于utf-8编码文本文件使用FSO的TextStream对象打开,读取到的内容可能会出现乱码,可以使用该对象打开;前期绑定添加引用…...

MongoDB结合Robo 3T 1.4.3的简单操作

MongoDB的简单操作结合Robo 3T 1.4.3工具进行查询。 常用的正则表达式 /* 29 */ 正则表达式 /\* [0-9]* \*/ "_id" : ObjectId("5f3d05cdfd2aa9a8a7"), 正则表达式 \"([^\"]*_id)\".*, 使用方法:查询结果去掉注释和不需要…...

【学习笔记】[AGC048D] Pocky Game

这是一个非平等博弈。但是只要求你判断胜负,本身也不是一道结论题,所以可以用 D P DP DP来解决。 结论:第一堆石子剩的越多,先手玩家获胜的概率越大。这直接引出了一个非常感性的结论:每次取石子时要么取一堆&#xf…...

Qgis中进行Shp和Excel属性连接实现百强县公共预算空间分析

前言 在之前的博文中,将2022的全国百强县一般公共预算收入的数据下载到了本地,博客原文地址:一种使用Java的快速将Web中表格转换成Excel的方法。对于不关注时空位置关系的一般分析,到此也就基本够用了。但是,如果站在全…...

ES6 新增的循环方法

在 ES6(ECMAScript 2015)中,新增了一些循环方法,这些方法可以帮助我们更方便地遍历数组、字符串、Set、Map 等数据结构。本文将介绍一些常用的 ES6 循环方法。 for…of 循环 for…of 循环是一种遍历可迭代对象的方法&#xff0c…...

移动端事件300ms延迟解决

有移动端与PC端的项目开发,那么移动端和PC端开发上是存在差异的,比如 click 事件的300ms 延迟,即移动Web页面上的click事件响应都要慢上300ms,移动设备访问Web页面时往往需要 “双击” 或者 “捏开” 来放大页面看清页面的具体内容…...

NRF52832的DFU

开发环境: Winsodw:10 nRF5_SDK:17.1.0 1 工具安装 1.1 gcc-arm-none-eabi Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer 下载“gcc-arm-none-eabi-10.3-2021.10-win32.exe”,接提示安装。注意安装完…...

开源WebRTC库放大器模式在采集桌面图像时遇到的DPI缩放与内存泄漏问题排查

目录 1、在非100%的显示比例下放大器采集到的桌面图像不全问题 1.1、通过manifest文件禁止系统对软件进行缩放 1.2、调用SetThreadDpiAwarenessContext函数,禁止系统对目标线程中的窗口进行缩放 1.3、使用winver命令查看Windows的年月版本 2、使用放大器模式遇…...

敲黑板!java反射机制和原理

获取Class对象&#xff1a;首先&#xff0c;你需要获取表示要操作的类的Class对象。可以使用以下三种方式之一来获取Class对象&#xff1a; Class.forName()方法&#xff1a;使用类的全限定名获取Class对象&#xff0c;例如&#xff1a;Class<? Class<?> clazz MyC…...

【大数据工具】HBase 集群搭建与基本使用

HBase 集群搭建 HBase 安装包下载地址&#xff1a;https://archive.apache.org/dist/hbase/ 安装 HBase 的前提&#xff1a; ZooKeeper 集群 OKHadoop 集群 OK 1. HBase 集群安装 1. 将 HBase 软件包上传至 Hadoop0 解压并重命名 使用 FileZilla 将 hbase-1.3.1-bin.tar.g…...

【Java】数组详解

文章目录 一、数组的基本认识1.1 数组的概念1.2数组的创建与初始化1.3 数组的使用 二、数组的类型 — 引用类型2.1 JVM 内存分布2.2 什么是引用类型2.3 基本类型变量与引用类型变量的区别2.4 Java 中的 null 三、数组的应用3.1 保存数据3.2 函数参数3.3 函数返回值 一、数组的基…...

NumPy库的学习

本文主要记录的是笔者在B站自学Numpy库的学习笔记。 引入numpy库 import numpy as np矩阵的创建 创建一个二行三列的矩阵。 array np.array([[1,2,3],[2,3,4]])查看array的行数、形状、元素数量 print("number of dim:",array.ndim) print("shape:"…...

CentOS安装IRIS

最近电脑提搞了&#xff0c;可以无顾虑创建虚拟机了&#xff0c;试一下在Linux安装IRIS&#xff0c;适用CentOS7.6上安装Intersystem公司的IRIS数据库&#xff0c;资料基本是空白&#xff0c;分享一下。 首先安装解压软件unzip和libicu&#xff0c;最小化安装的缺&#xff0c;…...

华为OD机试真题 JavaScript 实现【最多几个直角三角形】【2023Q1 100分】

一、题目描述 有 N 条线段&#xff0c;长度分别为 a[1]-a[n]。 现要求你计算这 N 条线段最多可以组合成几个直角三角形&#xff0c;每条线段只能使用一次&#xff0c;每个三角形包含三条线段。 二、输入描述 第一行输入一个正整数 T (1< T< 100) &#xff0c;表示有…...

vue3中的reactive、ref、toRef和toRefs

目录 reactivereactive的实现原理使用reactive的注意事项 refref的实现原理使用ref的注意事项 toRef和toRefsref和reactive的使用比较 reactive reactive用于创建响应式对象&#xff0c;它返回一个对象的响应式代理。即&#xff1a;它返回的对象以及其中嵌套的对象都会通过 Pr…...

数字图像处理与Python实现-图像增强经典算法汇总

图像增强经典算法汇总 文章目录 图像增强经典算法汇总1、像素变换2、图像逆变换3、幂律变换4、对数变换5、图像均衡化6、对比度受限自适应直方图均衡(CLAHE)7、对比度拉伸8、Sigmoid校正9、局部对比度归一化10、总结本文将对图像增强经典算法做一个简单的汇总。图像增强的经典…...

tag提示词总结

顺序的权重 越靠前的tag权重越大&#xff0c;越靠后的tag权重越小经验来讲&#xff0c;将图像质量相关的tag放在前面&#xff0c;例如masterpiece&#xff0c;best quality等&#xff1b;接着添加主体画风等&#xff1b;最后添加一些不太重要的细节 权重增减 (tag)&#xff1a…...

微信小程序原生开发功能合集二十:导航栏、tabbar自定义及分包功能介绍

本章实现导航栏及tabbar的自定义处理的相关方法介绍及效果展示。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: https://edu.csdn.net/course/detail/37977    2. 5…...

高通 Camera HAL3:项目开发技术点总结

做高通 Camera HAL3开发的一些技术点的总结、整理。 做个记录&#xff0c;方便后续查阅。 1.目录、so、配置文件 productName是项目名 out Target路径&#xff1a;\out\target\product\productName\chi-cdk&#xff1a;\vendor\qcom\proprietary\chi-cdk\ldc node&#xff1…...

chatgpt赋能python:Python怎么删除列表中的最大值和最小值

Python怎么删除列表中的最大值和最小值 在Python中&#xff0c;一个列表&#xff08;List&#xff09;是一种非常常见的数据结构&#xff0c;它允许我们以有序的方式存储和访问数据。但是&#xff0c;有时候我们需要从列表中删除最大或最小的值&#xff0c;以满足我们的特定需…...

简述Vue的生命周期以及每个阶段做的事情

03_简述Vue的生命周期以及每个阶段做的事情 思路 给出概念 列举出生命周期各个阶段 阐述整体流程 结合实际 扩展&#xff1a;vue3变化 回答范例 每个vue组件实例被创建后都会经过一系列步骤。比如它需要数据观测、模板编译、挂载实例到dom、以及数据变化的时候更新dom、…...

LeetCode-C#-0004.寻找两个正序数组的中位数

0.声明 该题目来源于LeetCode 如有侵权&#xff0c;立马删除。 解法不唯一&#xff0c;如有新解法可一同讨论。 1.题目 0004寻找两个正序数组的中位数 给定两个大小分别为m和n的正序&#xff08;从小到大&#xff09;数组nums1和nums2。 请你找出并返回着两个正序数组的中位…...

Vue.js 中的 $emit 和 $on 方法有什么区别?

Vue.js 中的 $emit 和 $on 方法有什么区别&#xff1f; 在 Vue.js 中&#xff0c;$emit 和 $on 方法是两个常用的方法&#xff0c;用于实现组件间的通信。它们可以让我们在一个组件中触发一个自定义事件&#xff0c;并在另一个组件中监听这个事件&#xff0c;从而实现组件间的…...

LAZADA平台的商品评论Python封装API接口接入文档和参数说明

LAZADA是一个位于东南亚的电商平台&#xff0c;成立于2012年。该平台覆盖的国家包括新加坡、马来西亚、印尼、菲律宾、泰国和越南等地。它提供了一个多样化的产品选择&#xff0c;包括时尚、美容、数码、母婴等商品&#xff0c;并且拥有许多知名品牌的官方旗舰店。同时&#xf…...

云原生Docker镜像管理

docker是什么&#xff1f; docker是一个go语言开发的应用容器引擎。 docker的作用&#xff1f; ①运行容器里的应用&#xff1b; ②docker是用来管理容器和镜像的一种工具。 #容器 与 虚拟机 的区别&#xff1f; 容器虚拟机所有容器共享宿主机内核每个虚拟机都有独立的操…...

ChatGPT+小红书的8种高级玩法

掌握了这套万能命令&#xff0c;让你快速做出小红书爆款文案! 一、用ChatGPT做定位 我是一个大龄的普通人&#xff0c;没有什么特殊的技能&#xff0c;接下来&#xff0c;请你作为一位小红书的账号定位专家&#xff0c;通过与我对话的方式&#xff0c;为我找到我的小红书账号定…...

shell脚本学习记录1(运算符)

Shell 传递参数 我们可以在执行 Shell 脚本时&#xff0c;向脚本传递参数&#xff0c;脚本内获取参数的格式为&#xff1a;$n。n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;以此类推…… 以下实例我们向脚本传递三个…...

石家庄业之峰装饰公司怎么样/seo推广效果

转自&#xff1a;http://my.eoe.cn/swer03160828/archive/20067.html 1) 如果在win32 下面编写的cocos2dx 的代码其文件 .cpp,.h 的文件&#xff0c;基本上都其他的平台上面可以直接把文件编辑是没有问题的&#xff01; 2) 大多数的学习游戏开的人&#xff0c;使用的很多都是 w…...

wordpress 插件 浮动小人/企业培训机构

一&#xff1a;重启xenserver&#xff0c;待启动界面进入到boot时&#xff0c;键入menu.c32二&#xff1a;待出现以下界面是&#xff0c;在5秒内按下tab键&#xff1a;三&#xff1a;按下tab建后&#xff0c;出现启动参数&#xff0c;然后加入single参数&#xff1a;回车&#…...

技术支持 东莞网站建设电脑回收/天津百度seo排名优化

内容安全策略&#xff08;CSP&#xff09;是一个增加的安全层&#xff0c;可帮助检测和缓解某些类型的攻击&#xff0c;包括跨站点脚本&#xff08;XSS&#xff09;和数据注入攻击。这些攻击用于从数据窃取到站点破坏或恶意软件分发的所有内容&#xff08;深入CSP&#xff09; …...

研发app大概要多少钱/百度代做seo排名

一、DDoS趋势的一些变化 从今年3月份起&#xff0c;世界上最大的DDoS攻击记录到了1.7 Tbps&#xff0c;是一个普通家庭带宽出口的数十万倍&#xff0c;几乎可以横扫互联网&#xff0c;作为一个生存了20年之久的古老攻击形式&#xff0c;我们看到了今年来DDoS攻击量成指数级攀升…...

详述电子商务网站的建设/怎么在百度上做广告推广

【例9-23】最长公共子序列【问题描述】w一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说&#xff0c;若给定序列X1,x2,…,xm>&#xff0c;则另一序列Z&#xff1d;1&#xff0c;z2&#xff0c;…&#xff0c;zk>是X的子序列是指存在一个严格递增的下…...

苏州网站开发公司电话/网店代运营公司靠谱吗

今天遇到一个问题&#xff1a;pc客户端和android的App通信&#xff0c;心跳通道&#xff08;心跳包27个字节&#xff0c;是一个业务空包&#xff09;在部分pc上总是会超时&#xff08;5秒超时&#xff09;&#xff0c;nagle算法也给禁用了&#xff0c;pc端时按按量发送心跳的&a…...