初识Linux · 有关gdb

news/2024/9/17 7:40:31/ 标签: linux, 运维, 服务器

目录

前言:

1 预备知识

2 gdb的使用


前言:

当我们Linux学到了这里的时候,我们大概会有一种感觉是,从VS2022转战Linux,写代码对我们来说是一种重新构建读写代码的一个过程,从文本编辑器,到文本编译器,再到今天的调试器gdb,读写代码的每个部分在Linux这里都是单独拉出来的,所以不免许多人会感受到困难,甚至于某些简单的代码在Linux这里都有点感觉晦涩难懂了,但是呢,难关总会过去的,咱们今天把gdb一看,我们就能再跨越代码的一大关卡 - 调试


1 预备知识

首先引入第一个问题,我们平常在VS编译代码的时候,左上角的debug和release是非常显然的,我们可以自由选择编译模式,那么在Linux中,编译代码的模式是什么呢?

linux中,gcc/g++编译代码默认是以release进行编译的,那么我们如何切换到debug模式呢?

只需要加 -g就可以:

这里是已经编译好了的,那么试着猜猜,哪个是debug版本,哪个是release版本的?

还是很好猜的,release版本的优化比debug厉害不说,debug也被称为调试版本,所以自然会存在一些调试信息,自然的,debug版本的大小比release版本的大。

那么我们如何看到调试信息呢?

输入以上命令即可,因为部分命令还没有涉及,这里先不做介绍。

以上就是调试信息,现在我们就该进入到调试了。


2 gdb的使用

首先,我们知道,在vs常用的技巧有,逐语句调试,逐过程调试,打断点,和断点配套的F5调试,监视窗口,跳转到指定行调试等。

那么我们在gdb里面要做的,也就是这些事。

首先进入调试很简单,就是gdb + 可执行文件。但是前提是已经用gcc -g生成了二进制的调试文件,此时才可以使用gdb进行调试。

进入之后,我们是不可能记得住我们所有的代码的,那么就需要我们将代码展示出来,此时用的指令是l,也就是list的意思,可以简写成l,后面+数字表示从哪里开始打印:

它的特点是默认打印10行,并且是打印该行数的上下文,所以这里打印了上下文:

并且gdb有一个特点就是,默认执行上次的命令,所以我们输入了一个l 5之后,就可以一直空格,直到:

这个的出现,代表已经打印完了,这里的l 6的数字并不是绝对数字,是相对的,我打印10行之后,l 6 代表的是10行之后的第6行。

还可以l 文件名:函数名,直接打印函数,也可以直接l 函数名:

好了,现在可以看到代码了,那么下一步是,如何打断点?

打断点用到的命令是Breakpoint,简称b,对应的操作有b 文件名:函数名/行号,或者直接b 函数名/行号:

那么断点就打好了,在VS里面,断点很显眼的来了个大红点,但是Linux中打了断点我们应该如何查看呢?

此时就要info (信息),简称为i,i b即可:

但是呢,因为主函数本质是代码块,所以打在主函数的断点就是打在主函数的第一条可执行语句上,所以有两个会重复。

那么断点有了,我们如何删除呢?删除用的是d,但是断点的名字是啥?欸~编号咯。

此时就删除成功了,我们再打断点看看:

欸?不难发现断点的名字是线性增长的,不存在回退的说法。

这是linux中断点的一个特性。

肯定会有人问的,Enb是什么意思?enable。代表是否可执行这个断点。

我们想要禁止一个断点只需要:

同理,希望它能使用只需要:

好了,基本的打断点我们会了,我们如何逐语句或者逐过程调试呢?

逐过程是:

next,下一步,简称为n,但是使用next的前提是要先run一下程序,不然程序跑不起来如何调试?

run就相当于F5,如果没有断点就是直接运行。

这里因为我是将断点打在了函数上,所以直接就运行了。

逐语句就是step,脚步,简称为s:

每s一下就会打印出执行的语句,如果超了,或者是程序没有run就会报以上的错误。

展示出来都是一样的,也是有自己的编号的,那么同理,undisplay也是需要编号的。

那么在VS里面还有断点之间互相跳动的,此时要用到的就是continue,继续,简称为c:

这样即可。

当然了,display是展示,调试的时候一直展示的意思,如果我们只是看一下,使用print,打印,简称p即可,此时$后面的数字就是打印的次数。

直接运行完一个函数不止可以逐过程,也可以用finish,代表,运行结束所在函数就停下来,也有until,比如我们进入了一个循环,想直接跳过就用until:

就像这样。

info local是查看局部栈帧变量的值,既然是栈帧,我们也可以看到是否有压栈:

bt即可,同理,也是有自己的编号的。

好了,该离开了,quit ,离开,简称q:

以上是关于gdb的一些浅薄的介绍,更详细的后续再更新。


感谢阅读!


http://www.ppmy.cn/news/1522712.html

相关文章

P1781 宇宙总统

[题目通道](宇宙总统 - 洛谷) #include<bits/stdc.h> using namespace std; int main() {int n,QQ; string w"";string q;cin>>n;for (int i1;i<n;i) {cin>>q;int z q.size();int x w.size();if (z>x||(z>x&&q> w)) {wq;QQ…

Vite + Vue3 +Vant4出现Toast is not a function

今天写前端的时候出现了这个问题搞了我一会 搜集原因: 1:是vant版本的问题&#xff0c;Toast()的方法是vant3版本的写法&#xff0c;而我用的是vant4&#xff0c;vant4中的写法改成了showToast()方法&#xff0c;改正过来 import {showToast} from "vant"; 发现还是…

本地部署AI大模型

mac windows 同理 用到的软件 docker ollama 大家可以到官网下载 在ollama官网选择models&#xff0c;这里面有用到的大模型 我用到的是 qwen2 &#xff0c;这个对中文比较友好 注意&#xff0c;每个模型有不同的参数版本&#xff0c;参数量越大&#xff0c;对电脑配置越高&…

flutter文本输入框使用

在Flutter中&#xff0c;实现输入框一般使用TextField&#xff0c;通过设置它的属性给输入框和内部文字设置不同的样式。 Flutter 输入框实现简单例子 import package:flutter/material.dart;class MyEditPage extends StatelessWidget {const MyEditPage({super.key});overr…

与MySQL邂逅

MySQL安装捏~ 其实每次新学一样东西&#xff0c;安装永远是一个小坎 但是小问题啦 安装MySQL要用root账户&#xff0c;安装后普通用户也可以用捏 要安装MySQL先来看第一步&#xff01; 改bug&#xff01; Centos 卸载不要的环境 先康康有木有捏&#xff1a; mariadb就是…

不小心删除了 Android 手机上的短信?3 步流程恢复误删除的短信以及图片、视频、联系人

不小心删除了 Android 手机上的短信&#xff1f;别担心&#xff0c;Android 版奇客数据恢复工具可以帮助您通过简单的 3 步流程恢复已删除的短信以及图片、视频、联系人等。 如何在 Android 上恢复已删除的短信 不小心删除了 Android 手机上的短信&#xff1f;Android 版奇客数…

Django缓存

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) Django 5框…

Web3社交新经济,与 SOEX 实现无缝交易的高级安全性

出于充分的理由&#xff0c;安全性是交易中至关重要的考虑因素。每个人都应该确保自己的资金在交易时是安全的。由于 &#xff33;&#xff2f;&#xff25;&#xff38; 充当您与交易所的最佳连接&#xff0c;因此必须强调的是&#xff0c;该系统不会引发任何安全问题。 &a…

C语言程序设计(算法的概念及其表示)

一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤…

帮招一名海康VM机器视觉工程师,工作地:苏州园区,行业:智能仓储自动化巨头,VM可以二次独立开发,岁数35岁以下,薪资18K+

工作职责&#xff1a; 能完成视觉系统的评估&#xff0c;合理的选择硬件配置&#xff0c;快速的完成软件功能开发和调试&#xff0c;并跟踪设备运转状况&#xff0c;保证设备稳定运行 能够清晰的理解客户某个站点的工艺需求&#xff0c;准确定位项目需求&#xff1b;能够根据需…

网络学习-eNSP配置VRRP

虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP) VRRP广泛应用在边缘网络中&#xff0c;是一种路由冗余协议&#xff0c;它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱&#xff0c;允许主机使用单路由器&#xff0c;以及即使在实际…

HTTP 一、基础知识

一、概述 1、概述 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff1a; 全称超文本传输协议&#xff0c;是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。HTTP 是一种应用层协议&#xff0c;是基于 …

微知-BIOS中的XHCI模式是什么意思?(usb3.0的扩展控制器影响usb3.0速率等选项)

XHCI “eXtensible Host Controller Interface” “可扩展主机控制器接口”。 英特尔公司开发的一个USB主机控制器接口&#xff0c;主要面向USB 3.0&#xff0c;同时也支持USB 2.0及以下版本的设备。 是usb3.0的核心部分。 有他表示主机支持usb3.0 三种模式&#xff1a;Smart …

效率神器Listary,附激活码

相信很多人都在用Everything&#xff0c;但是我更钟情于Listary&#xff0c;双击Ctrl即可实现软件调用&#xff0c;支持命令、文件搜索、网络搜索&#xff0c;妥妥的增效神器&#xff0c; 软件使用 文件查找时&#xff0c;双击Ctrl调用搜索框后再双击Ctrl&#xff0c;可以打开…

全国大学生数学建模竞赛全国奖项评阅工作规范(2023年修订稿)

为了适应新的形势,更好地促进全国大学生数学建模竞赛活动的健康发展,进一步提高全国奖项评阅工作的质量和公正、公平性,根据《全国大学生数学建模竞赛章程》和竞赛活动的现状,特制订本规范。 一、评阅组的组成 第一条 全国评阅专家组(以下简称评阅组)由全国大学生数学建…

达梦数据库管理员常用SQL(一)

达梦数据库管理员常用SQL(一) 数据库基本信息数据库参数信息表空间信息日志文件信息进程和线程信息会话连接信息SQL执行信息等待事件信息事务和锁信息数据库基本信息 --查询数据库内部版本号 select id_code; select build_version from v$instance; select * from v$versi…

【游戏安全】CheatEngine基础使用——如何对不同类型的数值进行搜索?如何破解数值加密找到想修改的数值?

游戏安全 不同数值类型的搜索破解简单数值加密 不同数值类型的搜索 可以在游戏中看到很精确的物品数量&#xff0c;但是在CE中却什么都扫不到。 这是因为他的数值类型可能并不是四字节的&#xff0c;在游戏中这个数值的机制是一个慢慢增长的数值&#xff0c;所以他很有可能是…

使用 docker 部署 kvm 图形化管理工具 WebVirtMgr

文章目录 [toc]前提条件镜像构建启动 webvirtmgr创建其他 superuser配置 nginx 反向代理和域名访问绑定 kvm 宿主机local sockettcp 连接 虚拟机创建创建快照虚拟机克隆删除虚拟机 kvm 官方提供了以下这些图形化管理&#xff0c;license 这块也提示了是商业版&#xff08;Comme…

利士策分享,如何规划多彩的大学生活?

利士策分享&#xff0c;学习规划多彩的大学生活 踏入大学&#xff0c;如同开启一场充满未知与可能的旅程。 为了让这段旅程不仅充满学术的熏陶&#xff0c;还洋溢着生活的多彩与人际的和谐&#xff0c;我们需要精心规划&#xff0c;积极行动。 一、多彩规划&#xff1a;点亮大学…

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)

SpringBoot教程&#xff08;十五&#xff09; | SpringBoot集成RabbitMq&#xff08;消息丢失、消息重复、消息顺序、消息顺序&#xff09; RabbitMQ常见问题解决方案问题一&#xff1a;消息丢失的解决方案&#xff08;1&#xff09;生成者丢失消息丢失的情景解决方案1&#xf…