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

2024-03-01 20:44

本文主要是介绍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来进行解密运算 -------> 再拷贝到内存当中 -----> 拷贝到输出设备(显示器)上。


总结

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

这篇关于Linux调试器-gdb使用与冯诺依曼体系结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/763749

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma