Linux调试器-gdb使用与冯诺依曼体系结构

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

前言

Linux调试器-gdb使用

1. 背景

2. 开始使用

冯诺依曼体系结构

总结


前言

世上有两种耀眼的光芒,一种是正在升起的太阳,一种是正在努力学习编程的你!一个爱学编程的人。各位看官,我衷心的希望这篇博客能对你们有所帮助,同时也希望各位看官能对我的文章给与点评,希望我们能够携手共同促进进步,在编程的道路上越走越远!


提示:以下是本篇文章正文内容,下面案例可供参考

Linux调试器-gdb使用

1. 背景

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g选项

debug版本可调试,那是因为编译器形成可执行程序的时候,会给可执行程序添加添加调试信息;而release版本不能调试。

2. 开始使用

gdb binFile(文件)   退出:ctrl + d 或 quit   

调试命令:

  • list/l (list简写) + 行号:显示binFile源代码,接着上次的位置往下列,每次显示10行(一般是从这一行的上下文的代码开始显示);如果向继续显示下面的代码,可以按回车,每次显示10行。
  • list / l + 函数名 : 行号:默认从函数名的第几行号开始,默认显示10行。
  • list / l + 文件名 : 行号:默认从文件的第几行开始,默认显示10行。
  • r或run:(或重新)运行程序。(相当于F5,要和断点一块使用)
  • break(b)  + (文件名) + 行号:在(文件的)某一行设置断点。
  • break + (文件名) :函数名:在某个函数开头设置断点。
  • info / (简写i) break(简写b) :查看打的断点的信息。
  • delete / (d) breakpoints n(序号为n的断点):删除序号为n的断点。
  • disable breakpoints(n:序号为n的断点):禁用断点。(序号为n的断点不想用,但是又不想删除掉)
  • enable breakpoints(n:序号为n的断点):启用断点。
  • n 或 next:单条执行。(逐过程)
  • s或step:进入函数调用。(逐语句)
  • p(print) + 变量名/取地址变量名:打印变量值。(可以在查看循环中的值)
  • display + 变量名/取地址变量名:跟踪查看一个变量,每次停下来都显示它的值。(常显示)
  • undisplay + 变量前面的编号:取消对先前设置的那些变量的跟踪。
  • 断点的本质:是帮我们缩小出问题的范围。
  • continue(或c):从当前位置开始连续而非单步执行程序。(从当前断点直接执行到下一个断点处。)
  • finish:执行到当前函数返回(也就是结束),然后挺下来等待命令。
  • until + X行号:跳转至指定行,中间的代码都是运行了的。比如:在循环的函数里面。
  • set var + 变量=你想要改成的值:修改变量的值。
  • delete breakpoints:删除所有断点。
  • info(i) locals:查看当前栈帧局部变量的值。
  • quit:退出gdb。
  • breaktrace(或bt):查看各级函数调用及参数。

冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成

  • 输入单元:包括键盘, 鼠标,扫描仪, 写板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器,打印机等

关于冯诺依曼,必须强调几点:

  • 这里的存储器指的是内存
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  • 一句话,所有设备都只能直接和内存打交道。

为什么要加储存器呢?

假如我们的输入设备和输出设备直接和CPU连接起来,会怎么样呢?数据从一个设备流到另一个设备,本质是拷贝过去的,而输入设备和输出设备的效率是非常低的,CPU的拷贝效率是非常高的,两者之间的效率差是非常大的。(想一想木桶效应,木桶存储水的多少,取决于最低的竹板,两者是一样的道理)

这时候加上存储器的话,让输入设备给存储器拷贝数据,存储器给CPU拷贝数据,CPU对数据紧进行处理后,返回给存储器,然后存储器将数据拷贝到输出设备上。以前CPU是直接在外设上拷贝数据,现在变成了CPU直接从存储器上拷贝数据(这两的拷贝效率会更快),而外设的拷贝只用作用到存储器就可以了。而存储器一次性可以存储大量的数据,大大提高了运行的效率。存储器比寄存器的内存容量更大,价格更低,性价比更高,适合广大民众。

结论:

在硬件数据流动角度,在数据层面:

1、CPU不和外设直接打交道,CPU只和内存打交道;

2、外设(输入和输出设备)的数据,不是直接给CPU的,而是要先放入到内存中。

程序运行,为什么要加载到内存?(冯诺依曼体系规定这么做的!!!)

程序=代码+数据:程序的“代码和数据”都要被CPU访问;CPU只会从内存中读取代码和数据

程序还没有加载到内存中的时候,在哪里?

在磁盘(外部设备),当前是二进制文件。

登录上QQ,就代表着QQ的 .exe 的可执行程序被加载到内存当中了。

我们发的信息“你好!”,在输入设备上会直接拷贝到内存中 ------> 存储器将数据拷贝到CPU ----> CPU对数据进行加密运算 -----> 再返回到存储器中 ------> 拷贝到输出设备(网卡) ------> 通过网络传到你朋友的输入设备(网卡) -----> 拷贝到内存的可执行程序中 ------> 拷贝到CPU来进行解密运算 -------> 再拷贝到内存当中 -----> 拷贝到输出设备(显示器)上。


总结

好了,本篇博客到这里就结束了,如果有更好的观点,请及时留言,我会认真观看并学习。
不积硅步,无以至千里;不积小流,无以成江海。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s部署mysql

(作者:陈玓玏) 一、前置条件 已部署k8s,服务端版本为1.21.14 二、部署mysql 拉取镜像; docker pull mysql将账号密码等信息写到configmap,创建configmap; apiVersion: v1 kind: ConfigMap m…

视觉AIGC识别——人脸伪造检测、误差特征 + 不可见水印

视觉AIGC识别——人脸伪造检测、误差特征 不可见水印 前言视觉AIGC识别【误差特征】DIRE for Diffusion-Generated Image Detection方法扩散模型的角色DIRE作为检测指标 实验结果泛化能力和抗扰动 人脸伪造监测(Face Forgery Detection)人脸伪造图生成 …

android TextView 实现富文本显示

android TextView 实现富文本显示,实现抖音直播间公屏消息案例 使用: val tvContent: TextView helper.getView(R.id.tvContent)//自己根据UI业务要求,可以控制 图标显示 大小val levelLabel MyImgLabel( bitmap 自己业务上的bitmap )va…

卷积神经网络基本概念补充

卷积(convolution)、通道(channel) 卷积核大小一般为奇数,有中心像素点,便于定位卷积核。 步长(stride)、填充(padding) 卷积核移动的步长(stride…

FPGA之带有进位逻辑的加法运算

module ADDER( input [5:0]A, input [5:0]B,output[6:0]Q ); assign Q AB; endmodule 综合结果如下图所示: 使用了6个Lut,,6个LUT分布…

定制红酒:一次满足需求的个性化服务体验

云仓酒庄洒派提供一次满足需求的个性化服务体验,让您的红酒定制之旅成为一段美好的记忆。 首先,云仓酒庄洒派深入了解每位消费者的需求。无论是对于红酒品种、年份、外包装还是其他个性化要求,云仓酒庄洒派都认真倾听并记录下来。这种细致入微…

Solo 开发者周刊 (第6期):

这里会整合 Solo 社区每周推广内容、产品模块或活动投稿,每周五发布。在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解。本杂志开源,欢迎投稿。 产品推荐 1. 助眠类播客《静夜斋》上线 一…

echarts鼠标向右/向左绘制实现放大/还原

echarts toolbox 的datazoom提供了绘制放大的功能,但通过鼠标绘制只能进行放大 应需求放大与还原都通过鼠标行为实现,增加从右往左绘制时还原放大结果 demo 结果 重写datazoom的原型方法实现绘制事件的拦截 const comp myChart._model.getComponent(to…

typora激活破解——仅需修改js即可

先打开官网下载typora,typora官网地址:https://typoraio.cn/安装完成后先启动一次Typora,看到激活提示,不需要点试用,直接关闭软件即可。找到安装路径,一般在 C:\Program Files接着找到安装路径&#xff0c…

CC攻击与DDoS攻击有什么区别?如何进行有效防护?

CC攻击的前身是一个名为Fatboy攻击程序,而之所以后来人们会成为CC,是因为DDoS攻击发展的初期阶段,绝大部分DDoS攻击都能被业界熟知的“黑洞”(collapsar,一种安全防护产品)所抵挡,CC攻击的诞生就…

配置artifactory的反向代理和域名访问

一、概述 在许多情况下,组织会通过反向代理来提供对 Artifactory 的访问。在某些情况下,例如使用 Artifactory 作为 Docker 注册表,这种设置甚至是强制性的。为了简化反向代理的配置,Artifactory 提供了生成反向代理的功能&#x…

android开发需要哪些基础,已拿到offer

在线绘图神器 很多小伙伴咨询说博客文章里的技术图怎么画出来的,这里透个底,大部分都是通过processon画出来的,在线画图十分方便,几乎可以画出你想要的任何技术图,包括:流程图、思维导图、原型图、UML图、…

WEB漏洞 逻辑越权之支付数据篡改安全

水平越权 概述:攻击者尝试访问与他拥有相同权限的用户的资源 测试方法:能否通过A用户操作影响到B用户 案例:pikachu-本地水平垂直越权演示-漏洞成因 1)可以看到kobe很多的敏感信息 2)burp抓包,更改user…

Unity中URP实现水体(整理优化)

文章目录 前言一、优化水的深度1、我们把 水流动的方向 和 水深浅过渡值,整合到一个四维变量中2、修改 水体流动方向3、在片元着色器中,修改使用过渡变量 二、优化泡沫三、优化水下的扭曲1、修复原本扰动UV的计算 四、优化水面高光1、把高光强度、光滑度…

基于java+springboot景区行李寄存管理系统设计和实现

基于javaspringboot景区行李寄存管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…

今年国内石油需求稳中有升,巡检机器人助力石油行业可持续发展

前言:全球能源市场出现普遍回落趋势,其中石油价格下降近20%,而天然气和煤炭价格更是下跌超过50%。此外,碳酸锂和光伏组件价格也纷纷下降超过50%。这种价格下滑对于全球经济的持续增长,尤其是控制通货膨胀方面&#xff…

OpenLayers线性渐变和中心渐变(径向渐变)

目录 1.前言2.添加一个面要素3.线性渐变3.1 第一个注意点3.2 第二个注意点 4.中心渐变(径向渐变)5.总结 1.前言 OpenLayers官网有整个图层的渐变示例,但是没有单个要素的渐变示例,我们这里来补充一下。OpenLayers中的渐变是通过fi…

创意电子名片二维码生成的优势:引领商务交流的全新潮流

在数字化时代,传统的纸质名片已逐渐被创新的电子名片二维码所取代。电子名片生成二维码作为一种便捷、高效的信息交换方式,具有诸多优势。而通过融入二维彩虹技术,电子名片二维码不仅实现了信息的即时传递,更在视觉上为商务交流增…

MySQL的索引和B+tree结构

目录 0.关于索引的常见面试题 1.什么是索引? 索引的优缺点 2.索引的数据结构,为什么InnoDb引擎使用Btree作为索引的数据结构? 分析怎样的索引才是好的 二插搜索树 红黑树 B-Tree BTree 哈希 为什么 InnoDB 存储引擎选择使用 Btree 索…

vue3创建h5 项目使用rem做响应式的配置

第一步 安装依赖: npm install amfe-flexible -S npm install postcss-px2rem -S第二步 main.ts文件中导入 import "amfe-flexible/index.js";第三步 进行配置: vue3 项目中创建 postcss.cinfig.js文件,这里是基于设计稿是750px…