Linux——팔 gdb部分基础知识以及操作系统的初级理解

news2024/11/22 22:09:36

文章目录

  • 一、gdb部分基础知识
      • 1、打断点
      • 2、逐语句过程
      • 3、监视,内存
      • 4、部分功能指令
  • 二、进程概念的初级理解
      • 1、冯-诺依曼体系结构
      • 2、操作系统的初级理解


一、gdb部分基础知识

承接上一篇。

1、打断点

放一下全部代码

  1 #include <stdio.h>
  2 
  3 int ADD(int n)
  4 {
  5   int sum = 0;                                                                                                                                                                                                                
  6   for(int i = 1; i <= n; i++)
  7   {
  8     sum += i;
  9   }
 10   return sum;
 11 }
 12 
 13 int main()
 14 {
 15   int n = 100;
 16   int m = 0;
 17   m = ADD(n);
 18   printf("m:%d\n", m);
 19   return 0;
 20 }

用b打断点也可以标明文件名和函数名来打。

在这里插入图片描述

断点会出现在15行,因为实际上函数是在15行开始执行的。

也可以冒号后面跟行号。

退出的时候quit即可,如果正在调试,会问操作者是否退出。

断点删除时,d breakpoints就可以删除全部断点。

2、逐语句过程

在vs中,有逐语句和逐过程两个功能。在linux中,next是逐过程

在这里插入图片描述

如图,在17行打了一个断点,到这里停下后,按next就会直接运行完ADD函数,来到18行,再按next,就会来到19行。可以简写为n。

在这里插入图片描述

在17行打一个断点,按r运行后,来到17行,s键就会进入函数,并且显示出来传入的数据。如果想要查看调用的信息,bt即可。

在这里插入图片描述

n和s,我们就可以想象vs的功能实现,一次次按s,就会一个个往下走,也可以按回车来代替按n或者s。

3、监视,内存

  1 #include <stdio.h>
  2 
  3 int ADD(int n)
  4 {
  5   int sum = 0;                                                                                                                                                                                                                
  6   for(int i = 1; i <= n; i++)
  7   {
  8     sum += i;
  9   }
 10   return sum;
 11 }
 12 
 13 int main()
 14 {
 15   int n = 100;
 16   int m = 0;
 17   m = ADD(n);
 18   printf("m:%d\n", m);
 19   return 0;
 20 }

Linux中,p 后面跟要查询的东西即可。比如p sum,就可以看到当前sum的值。vs可以实时看到每个变量的值的变化,Linux也可以。

display 跟查看的内容,那么程序每次前进的时候就会实时展示值的变化,常显示指令。查看的内容包含内置类型,结构体等自定义类型。

在这里插入图片描述

想要取消的话,undisplay 编号。

在这里插入图片描述

4、部分功能指令

在Linux中,有个特别的功能,它支持只运行到某一个指定的行,until后面跟行号,程序就会运行到这一行,在这一行之前应形成的变量也会展示出来。

在这里插入图片描述

如果只想运行一个函数,那么在进入这个函数后,finish即可执行完整个函数,但是不会继续走,执行完就停。

在这里插入图片描述
这里运行完函数就出来了,还在17行。

如果从一个断点处直接运行到下一个断点处,continue,简写c即可。

在这里插入图片描述

遍历一个循环时,想快速结束时,可以设置其中的变量的值,比如i <= 100,那么可以设置i = 100,再运行,循环就结束了。set var。

在这里插入图片描述

二、进程概念的初级理解

1、冯-诺依曼体系结构

看一个形象的图

结构中有输入/出设备,内存,CPU。输入/出设备统称外部设备,简称外设。
在这里插入图片描述
输入和输出设备是必要的,键盘敲入的符号,显示器可以显示出来。我们都知道给到电脑的信息,也就是输入设备中提取到信息,电脑会在CPU里计算, 然后再给到输出设备里去显示,那么这个内存在中间有什么用处?
输入/出设备和CPU的速率是有很大差距的,如果只存在这三个,那么电脑整体的运算速率就不会很快,被输入/出设备拖累了。所以为了能够提升整体的速率,就有了内存这个中间物体。内存的速度相对于输入/出设备是快的,但又慢于CPU;在冯-诺依曼结构中,输入设备把信息给到内存,CPU从内存中拿到信息,经过运算后,再返还给内存,输出设备从内存中拿到数据,再显示出来。

经过这样的过程,在数据层面,CPU只从内存中获取信息,而不和外设沟通。

这样的结构确实大大提升了运算速率。但是可能会发现一个问题,为什么不在CPU里弄一个中间设备,这样不是更快吗?因为CPU里搞存储太贵了,内存尚且有高价,但内存作为商品普及,民用是没有问题的,如果是CPU里的存储设备,价格高得多,普通人不敢多做换存储的打算,这种内存的普及就很困难,进而影响计算机的普及。

有了内存,当输入数据的时候,就会放到内存进行预加载,然后再给到CPU去运算。这也就是为什么形成的可执行文件会先写到内存中,然后我们./ + 文件名的时候就会从内存中拿到文件,直接运算。

基于这种硬件结构,数据是如何流动的?

比如A和B聊天,A给B发信息,这时候我们从手机键盘输入字,输入设备得到了数据,然后给到内存,内存预加载一下,CPU从内存里拿过来计算,然后给到内存,内存再给到输出设备,也就是屏幕;点击发送后,信息给到了网卡,B从网卡那里得到数据,这时候网卡也就是B的输入设备,然后再重复这一套流程,最终B的屏幕上显示出A发来了消息。

我们可以发现,外设只和内存沟通。

在冯-诺依曼结构基础上,进程也是这样流通,在内存中加载,然后给CPU运算,CPU在还给内存,但进程有自己的方式,本篇并不说这个。

冯-诺依曼结构是一个硬件结构,接下来看操作系统这个软件结构。

2、操作系统的初级理解

操作系统本质上是一个进行软硬件资源管理的软件。

硬件结构有了,我们如何能很好地利用硬件?这也就是操作系统存在的意义,正如片上系统一样,除了有精密的硬件,也要有合理的系统。

我们暂且分成三部分,操作系统,硬件驱动,软硬件。操作系统通过驱动来管理硬件和软件。驱动激活软硬件后,计算机才能正常使用,这也就是操作系统的管理方式。软硬件上传自己的数据给驱动,驱动再给到操作系统,操作系统有自己的方法去把所有的数据整理成特定的数据结构,以此来更高效地管理数据。

上面所写的是操作系统对软硬件进行管理的方式。操作系统之所以要管理软硬件资源是因为要给用户提供更好的执行环境。虽然给用户提供服务,但是操作系统不相信用户。用户想要使用操作系统的功能,就得按照系统规则来操作,这也就是系统调用。比如在Linux写C语言代码,Linux就会给用户C语言相关文件,环境等等,然后具体怎么给的,里面都是什么内容可不会展现给用户。系统有很多接口,连接着相应的功能,以及还有一个问题,就是如何更方便地使用接口。Linux中,我们看到的是命令行,但是如果不是程序员,Linux是绝对不会用的,所以也就出现了改变人类的发明——窗口化操作,windows。

从最一开始确定系统的作用,之后为了更好地给用户提供服务,系统逐步升级,才有了我们现在看到的熟知的操作系统。

结束。

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

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

相关文章

vs2017调试ffprobe源码

鄙人之前写过vs2017调试ffmpeg源码 现在由于需要分析视频文件里面的具体帧情况&#xff0c;需要用到ffprobe工具&#xff0c;为此本篇博客搭建vs2017工程&#xff0c;可以调试ffprobe&#xff0c;ffprobe比ffmpeg简单很多。 首先找到ffmpeg的编译目录&#xff0c;将下列三个文…

结构体内存对齐与位段详解

文章目录前言一、内存对齐1.内存对齐的规则2. 内存对齐的具体实例与运用3.为什么会有内存对齐&#xff1f;4.修改默认对齐数二、位段1.什么是位段2.位段的例子3.位段的优缺点结语前言 学习了结构体&#xff0c;你会算结构体的占用字节数吗&#xff0c;许多人恐怕摇头&#xff0…

ArcGIS分式、假分式标注

解说一下 ArcGIS中不同标注 直接标注语句分享见文后 分式标注 假分式标注 二、标注语句与视频教学 ArcGIS分数、假分数标注获取语句地址&#xff1a; ArcGIS分式、假分式标注&#xff01;标注语句直接分享 推荐学习 ArcGIS之模型构建器&#xff08;ModelBuilder&#xff0…

初级通讯录的实现详细攻略

我们设计的要求存储多少个人的信息我们使用宏&#xff0c;这样方便修改建立三个文件先从主函数入手为了持续多次&#xff0c;实现操作&#xff0c;我们利用循环&#xff0c;循环次数未知&#xff0c;我们只能选择while循环&#xff0c;do-while循环&#xff0c;我们始终要进行一…

ORB-SLAM2 --- LoopClosing::Run 回环检测线程解析

目录 1.函数作用 2.code 3.函数解析 3.1 查看是否有待处理的回环关键帧LoopClosing::CheckNewKeyFrames 3.2 检测闭环LoopClosing::DetectLoop 3.3 计算当前关键帧和上一步闭环候选帧的Sim3变换 3.4 闭环矫正 1.函数作用 回环检测&#xff0c;又称闭环检测&#xff0c…

文件操作和IO

一.文件的概念&#xff1a;狭义的文件指&#xff1a;硬盘上的文件和目录广义上的文件指&#xff1a;计算机中的很多软硬件资源路径&#xff1a;绝对路径&#xff1a;以c&#xff1a;d盘符开头的路径&#xff0c;比如c:/Intel/Logs/text.txt相对路径&#xff1a;以当前所在的目录…

Vue - 完美解决小数的四则运算(加减乘除)导致精度丢失问题,提供详细计算示例代码vue数据计算丢失精度

前言 由于 JavaScript 语言的问题,两个小数进行四则运算时,会出现各种问题,一些财务系统是必须要解决的。 本文实现了 完美修复小数计算时,计算错误、精度丢失等问题, 您可以进行任意小数的四则运算,都能保证结果是正确的。 如下图所示,使用了本文提供的方法后,可以形…

ArcGIS修改图斑时替换几何的妙用!不要只会整型要素

我们时常通过整型要素来修改要素的形状&#xff0c;但是有时候我们改变整个要素的形状、位置&#xff0c;还要保留属性不变&#xff0c;那我们就要考虑&#xff0c;高级编辑中的“替换几何”工具了。 01 替换几何原理 1 、“替换几何”工具可以为要素创建全新形状。“替换几何…

【Java】Properties类

文章目录01 初识Properties02 Properties常用方法03 Properties使用案例01 初识Properties 创建这样一个配置文件&#xff1a; 传统方法&#xff1a; public static void main(String[] args) throws IOException {//读取mysql.properties文件&#xff0c;并得到ip、user、pw…

Dubbo集群容错

Dubbo集群容错 1. 集群容错 集群调用失败时&#xff0c;Dubbo 提供的容错方案。 在集群调用失败时&#xff0c;Dubbo 提供了多种容错方案&#xff0c;缺省为 failover 重试。 各节点关系&#xff1a; 这里的 Invoker 是 Provider 的一个可调用 Service 的抽象&#xff0c;I…

n皇后(回溯)

著名的n皇后问题 即在棋盘上任意两个皇后不能在同一行&#xff0c;同一列&#xff0c;或者斜对角线&#xff0c;反斜对角线的位置 以判断&#xff08;5&#xff0c;1&#xff09;位置为例 往右下方&#xff08;斜对角线&#xff09;一连串的位置 &#xff08;5&#xff0c;1&…

Naive-UI自定义TabPane样式

前言前端开发通常使用 第三方 UI 组件库&#xff0c;像大家熟悉的 Element-UI、AntD Vue 等最近发现一个 还比较好用的 组件库 Naive-UI 传送门 &#xff0c;Vue 3 组件库&#xff0c;使用 TypeScript &#xff0c;用起来感觉还不错&#xff0c;它的主题也可以切换 &#xff08…

首款自研成像雷达发布!国产玩家赋能智能驾驶“第四类”感知

4D成像雷达赛道的“战火”正在不断升级。 高工智能汽车研究院预计&#xff0c;4D成像雷达将从2023年初开始小规模前装导入&#xff0c;预计到2024年&#xff0c;定点/搭载量有望突破百万颗&#xff0c;到2025年占全部前向毫米波雷达的比重或超过40%。 伴随着中国自动驾驶的渗…

Java多线程:多线程 Thread 类 中常用的方法的使用

Java多线程&#xff1a;多线程 Thread 类 中常用的方法的使用 每博一文案 日本有一位方丈曾在其寺庙的公告栏上写下一句标语&#xff1a; ”没有失败的人生才最失败。“ 深以为然&#xff0c;不上高山&#xff0c;不知平地&#xff0c;不经大海&#xff0c;不懂宽阔的涵义&…

很少人知道的7个极酷HTML元素

搜索很酷的HTML元素&#xff0c;尤其是当您不知道要查找什么时&#xff0c;通常就像被扔进一堆垃圾中一样动图别担心&#xff0c;我为你做了肮脏的工作&#xff01;在浏览了看似无穷无尽的HTML元素之后&#xff0c;我挖出了一些很少使用的宝石&#xff01;1. meter&progres…

多线程Monitor工作原理

&#x1f34e;1. 什么是Monitor?我们都知道synchronized的作用是用来保证修饰的代码或者方法执行有且只有一个线程执行&#xff0c;也就是锁。那么在执行被锁住的方式时&#xff0c;synchronized就需要通过monitor来记录和保证锁的状态。所以monitor这里的作用其实就是起到了控…

RFID固定资产管理系统实现批量“秒”级盘点

面对成千上万&#xff0c;乃至几十万的固定资产&#xff0c;如何能高效管理&#xff0c;做到管理无漏洞&#xff0c;盘点无错漏呢&#xff1f;很多企业和软件厂商都在考虑这个问题。现如今&#xff0c;随着物联网的发展&#xff0c;企业可批量实现固定资产的秒级盘点&#xff0…

【C++核心编程】C++全栈体系(十一)

C核心编程 第四章 类和对象 七、多态 1. 多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态&#xff0c;复用函数名动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别&#xff1a; 静态多态的函数…

打印机共享遇到的常见问题与解决方法

共享打印机提示错误0X000006d9 解决方法: 1、桌面找到计算机或此电脑,然后再图标上右键选择管理选项菜单; 2、在打开的计算机管理对话框中选择服务和应用程序选项; 3、双击服务和应用程序选项就会打开一个对话框,然后再选择服务菜单双击;

01-JDK、JRE、JVM之间的区别?

1.JDK JDK(Java SE Development Kit)&#xff0c;Java标准开发包&#xff0c;它提供了编译、运⾏Java程序所需的各种⼯具和资源&#xff0c;包括Java编译器、Java运⾏时环境&#xff0c;以及常⽤的Java类库等. JDK安装目录中真正在运行java时起作用的是 bin、include、lib、…