告别编程困惑:GDB、冯诺依曼、操作系统速通指南

news2025/1/6 14:23:18

 🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟   

🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩    


目录

前言

一、GDB 调试器:程序的 “纠错神器”🛠️

(一)GDB 操作指南📖

二、冯诺依曼体系结构:计算机的 “底层蓝图”🗺️

三、操作系统:计算机的 “大管家”👨‍🏭

(一)操作系统的使命🎯

(二)操作系统的管理智慧🧠

(三)系统调用与库函数:开发的 “助力器”🚀

结尾🎉


前言

编程的道路上,程序时不时就像调皮的小精灵🧚‍♂️,突然 “闹脾气”,可把不少小伙伴愁坏啦😩。别担心!只要掌握 Linux 调试器 GDB,弄懂计算机底层架构与操作系统原理,这些难题就能轻松化解。现在,就让我们一起踏上探索这些实用知识的旅程吧🧐!


一、GDB 调试器:程序的 “纠错神器”🛠️

程序发布通常有 debug 和 release 两种模式。

  • debug可以调试,形成可执行程序的时候会有调试信息
  • release不能调试

在 Linux 系统里,gcc/g++ 编译生成的二进制程序,默认是 release 模式,这种模式下程序跑得飞快,但要是出了问题,排查起来就像在黑暗中摸索,难上加难。

而如果想让 GDB 这位 “调试高手” 来帮忙,在编译的时候就得加上 -g 选项,这就好比给程序戴上了一副 “透视镜”🔍,让问题无处遁形。

 

因此要被gdb调试,必须debug方式发布,必须加 -g

 

(一)GDB 操作指南📖

  1. 启动与退出:使用 “gdb binFile” 就能开启调试之旅啦🚀,要是想结束调试,敲下 “ctrl + d” 或者输入 “quit” 就可以和 GDB 说拜拜咯👋。
  2. 查看代码:“list/l 行号” 可以接着上次的位置列出 10 行代码,就像有个贴心小助手,按你的要求翻代码页📄;“list/l 函数名” 则能直接列出特定函数的代码,比如调试游戏程序时,用它就能快速看到 “jump” 函数是怎么写的🧐。
  3. 运行程序:“r 或 run” 一下,程序就像听到发令枪响的运动员🏃‍♂️,“嗖” 地开始跑起来啦,在赛车游戏里,这就相当于赛车发车咯🏎。
  4. 单步执行“n 或 next” 就像给程序下了个 “慢动作” 指令,让它一次只执行一条语句,方便你一步一步揪出问题小尾巴🐾。(逐语句)
  5. 进入函数“s 或 step” 这个命令超厉害,能像个小侦探一样,带着你钻进函数内部,看看里面到底在搞什么 “小动作”🕵️‍♂️。(逐过程)
  6. 设置断点“break (b) 行号” 可以在指定的行上设个 “关卡”🚧,程序跑到这就会停下来;“break 函数名” 则是在函数开头设卡。要是你觉得 “加速” 函数有点可疑,就在它开头设个断点呗。“info break” 能帮你查看都设了哪些断点,要是设错了,“delete breakpoints” 可以一键删除所有断点,“delete breakpoints n” 能精准删除序号为 n 的那个断点。要是暂时不想让某个断点起作用,“disable breakpoints” 把它 “关禁闭”,后面想用了,“enable breakpoints” 再放它 “出来工作”😜。
  7. 操作变量:“print (p) 变量” 或者 “p 变量” 都能打印出变量的值,就像给变量来了个 “X 光透视”,看看它里面装的啥;“print (p)” 还能顺便修改变量或者调用函数,厉害吧!“set var” 则是直接给变量 “改头换面”,让它按照你的新想法来。
  8. 其他命令:“finish” 能让程序把当前函数执行完,然后像个听话的孩子一样停下来等你指示🧒;
    “continue (或 c)” 就像你对程序说 “继续跑吧”,它就从当前位置接着跑起来啦
    “display 变量名” 可以像个小跟班一样,一直盯着某个变量,每次程序停下来都给你汇报变量的值,要是不想让它跟了,“undisplay” 让它 “退下”
    “until X 行号” 能让程序像会瞬移一样,直接跳到指定的行;
    “disable+断点”可以暂时忽略这个断点,而“enable+断点”则恢复这个断点
    “breaktrace (或 bt)” 能帮你画出程序的 “行动路线图”,看看各级函数都被怎么调用的,带了哪些参数;“info(i) locals” 则是帮你查看当前这个 “小环境” 里局部变量的值。

总结表格

操作类型命令说明
启动与退出gdb binFile
ctrl + d 或 quit
开启调试 🚀/ 结束调试 👋
查看代码list/l 行号
list/l 函数名
按行号或函数名查看代码 📄
运行程序r 或 run启动程序 🏃‍♂️
单步执行n 或 next一次执行一条语句 🐾
进入函数s 或 step深入函数内部 🕵️‍♂️
设置断点break (b) 行号
break 函数名
info break
delete breakpoints
delete breakpoints n
disable breakpoints
enable breakpoints
设置断点 🚧/ 查看断点 / 删除所有断点 / 删除指定序号断点 / 禁用断点 / 启用断点 😜
操作变量print (p) 变量
p 变量
set var
打印变量值 🎯/ 打印变量值(简版)/ 修改变量值 🔄
其他finish
continue (或 c)
display 变量名
undisplay
until X 行号
breaktrace (或 bt)
info(i) locals
执行完当前函数返回暂停 🧒
从当前位置继续运行
跟踪变量 📌
取消跟踪变量
跳转到指定行 ⚡
查看函数调用及参数 🗺️
查看当前栈帧局部变量值 👀

二、冯诺依曼体系结构:计算机的 “底层蓝图”🗺️

 先谈硬件,再谈软件,再谈进程

咱们平常使用的电脑,像笔记本、服务器这些,大多都是按照冯诺依曼体系结构来搭建的。这个结构就像是计算机的 “骨架”,支撑着它的各种功能💻。它主要由下面三部分组成:

 

  1. 输入单元:像键盘、鼠标这些,就像是计算机的 “耳朵” 和 “眼睛”👂👀,负责把外界的信息传递给计算机,让计算机知道你想干啥。
  2. 中央处理器 (CPU):这可是计算机的 “超级大脑”🧠,运算器就像个超厉害的计算器,能快速处理各种数据运算,控制器则像个指挥官,指挥着计算机各个部分有条不紊地工作。
  3. 输出单元:比如显示器、打印机,它们就像计算机的 “嘴巴”👄,把计算机处理好的结果展示给你看。

举个例子👇:

这里要特别注意哦,在冯诺依曼体系里,存储器说的就是内存。CPU 就像个有点 “小傲娇” 的家伙,只愿意和内存 “交流”,外部设备要想和 CPU “说说话”,都得通过内存这个 “中间人” 来传话。就拿 QQ 聊天来说吧,你发消息的时候,通过键盘输入(输入单元),消息就先跑到内存这个 “小驿站” 歇着,然后 QQ 程序在 CPU 这个 “大指挥官” 的指挥下,从内存里把消息拿出来处理,处理完再放回内存,接着通过网络(输出相关功能)发出去给对方。对方收到消息后,也是先把消息放在内存 “驿站”,再由显示器(输出单元)显示出来给对方看。要是发文件,文件数据就像一大包行李,也是先到内存 “驿站”,再处理传输。

总结表格

组成部分功能举例
输入单元为计算机输入信息 👂👀键盘、鼠标
中央处理器 (CPU)运算器负责数据计算,控制器指挥各部分工作 🧠处理各种数据运算、控制程序流程
输出单元展示计算机处理结果 👄显示器、打印机
特殊说明CPU 仅与内存交互,外设通过内存中转数据 📩QQ 聊天消息、文件传输

一个程序要运行,必须要先加载到内存中运行?为什么?

为什么我们当时写的进度条,默认显示的数据,是可能会缓存起来?在哪里缓存?

因为冯诺依曼体系结构规定的,硬件要求


三、操作系统:计算机的 “大管家”👨‍🏭

(是什么)

 

操作系统(OS)就像是计算机系统的 “大管家”,把计算机的各种事务安排得明明白白。它主要包括内核和其他程序两部分。内核负责进程管理、内存管理、文件管理、驱动管理这些重要的事儿,就像管家的几个得力助手,各自把自己的活儿干得漂亮;其他程序呢,像函数库、shell 程序这些,就像是管家的小工具,帮我们更方便地使用计算机。

(一)操作系统的使命🎯

  1. 管理资源:和硬件打交道,合理安排软硬件资源,就像管家要把家里的东西都安排得井井有条,让它们都能发挥自己的作用。
  2. 提供环境:给应用程序打造一个舒适、稳定的 “小窝”,让它们能顺顺利利地运行,就像音乐软件能在操作系统提供的环境里流畅播放音乐🎵。

 

(二)操作系统的管理智慧🧠

操作系统会用 struct 结构体来给硬件做个详细的 “档案”📄,就像给每个硬件发了一张 “身份证”,上面记录着各种信息。然后再用链表等数据结构把这些 “身份证” 整理好,方便管理,这样就能快速找到需要的硬件信息啦。

(三)系统调用与库函数:开发的 “助力器”🚀

(为什么)

从开发的角度看,操作系统就像一个神秘的大宝藏,它打开一些小窗口,这些窗口就是系统调用,开发者可以通过这些窗口和操作系统互动。不过系统调用的功能比较基础,就好比给了你一些基础材料,让你自己动手做东西,对开发者要求有点高。这时候,聪明的开发者就把这些基础材料加工了一下,做成了库函数,库函数就像已经组装好的高级工具,用起来更方便,让上层开发变得轻松不少。比如说,盖房子的时候,系统调用给你的是砖头、水泥这些基础材料,库函数就像是已经做好的预制板,直接用就行,是不是方便多啦😃。

(怎么做后文再讲解)

总结表格

分类内容说明
操作系统组成内核
其他程序
管进程、内存等关键任务 👨‍💼
如函数库、shell 程序辅助使用计算机 🛠️
操作系统使命管理资源
提供环境
与硬件交互管理资源 🛠️
保障应用程序稳定运行 🎵
管理方式struct 结构体描述硬件
链表等组织硬件
为硬件做 “身份证” 📄
实现高效管理 📁
开发相关系统调用
库函数
基础功能,对开发者要求高 🧐
封装系统调用,方便上层开发 😃

结尾🎉

好啦,小伙伴们!今天咱们一起探索了 GDB 调试、冯诺依曼体系和操作系统的奇妙世界。

希望这些知识能成为你们编程路上的 “秘密武器”,以后遇到问题,再也不怕不怕啦💪!祝愿大家在编程的海洋里乘风破浪,编写出超酷炫的程序哦🌈!


  如果在学习过程中有任何疑问或建议,欢迎随时交流分享哦😉! 👉【A Charmer】

 

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

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

相关文章

Jenkins 中自动化部署 Spring Boot 项目

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

cesium小知识:常见的20多种property详解

要详细解释 Cesium 中所有的 Property 类,内容确实会非常丰富且详尽。 Property 基础 Property 是 Cesium 中用于表示随时间或条件变化的值的基础类。它允许你定义属性值如何根据时间、用户交互或其他逻辑动态改变。Property 的设计使得你可以创建复杂的动画和交互效果,而…

PCL点云库入门——PCL库点云特征之点云法向量(NormalEstimation)及其可视化

1、PCL点云库中点云特征综述 1.1、点云特征综述 点云特征描述在三维数据处理领域扮演着至关重要的角色,它直接决定了后续的识别、分类以及重建等关键任务的执行效果。在众多的特征描述方法中,我们可以看到基于几何形状的特征、基于统计信息的特征以及…

【《python爬虫入门教程11--重剑无峰168》】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 【《python爬虫入门教程11--selenium的安装与使用》】 前言selenium就是一个可以实现python自动化的模块 一、Chrome的版本查找?-- 如果用edge也是类似的1.chrome…

C++之map和set的模拟实现

目录 引言 红黑树迭代器实现 红黑树元素的插入 map模拟实现 set模拟实现 之前我们已经学习了map和set的基本使用,但是因为map和set的底层都是用红黑树进行封装实现的,上期我们已经学习了红黑树的模拟实现,所以本期我们在红黑树模拟实现…

黑马JavaWeb开发跟学(十四).SpringBootWeb原理

黑马JavaWeb开发跟学 十四.SpringBootWeb原理 SpingBoot原理1. 配置优先级2. Bean管理2.1 获取Bean2.2 Bean作用域2.3 第三方Bean 3. SpringBoot原理3.1 起步依赖3.2 自动配置3.2.1 概述3.2.2 常见方案3.2.2.1 概述3.2.2.2 方案一3.2.2.3 方案二 3.2.3 原理分析3.2.3.1 源码跟踪…

十二、Vue 路由

文章目录 一、简介二、安装与基本配置安装 Vue Router创建路由实例在应用中使用路由实例三、路由组件与视图路由组件的定义与使用四、动态路由动态路由参数的定义与获取动态路由的应用场景五、嵌套路由嵌套路由的概念与配置嵌套路由的应用场景六、路由导航<router - link>…

【C++笔记】红黑树(RBTree)深度剖析和AVL树的对比分析

【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析前言一.红黑树的定义1.1 红黑树的概念1.2红黑树的规则1.3 红黑树对比A…

grouped.get_group((‘B‘, ‘A‘))选择分组

1. df.groupby([team, df.name.str[0]]) df.groupby([team, df.name.str[0]]) 这一部分代码表示对 DataFrame df 按照 两个条件 进行分组&#xff1a; 按照 team 列&#xff08;即团队&#xff09;。按照 name 列的 首字母&#xff08;df.name.str[0]&#xff09;。 df.name.s…

计算机毕设-基于springboot的食品厂管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

【Ubuntu20.04】Apollo10.0 Docker容器部署+常见错误解决

官方参考文档【点击我】 Apollo 10.0 版本开始&#xff0c;支持本机和Docker容器两种部署方式。 如果您使用本机部署方式&#xff0c;建议使用x86_64架构的Ubuntu 22.04操作系统或者aarch64架构的Ubuntu 20.04操作系统。 如果您使用Docker容器部署方式&#xff0c;可以使用x…

Java项目实战II基于小程序的驾校管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着汽车保有量的不断增长&#xff0c;驾驶培训市场日…

基于STM32F103的USART的原理及应用(一)(实现手机BLE和MCU进行通信)

一&#xff0c;查阅数据手册&#xff0c;找到对应的IO口和外设总线并配置好外设源文件 想了解USART的具体原理的小伙伴请进传送门&#xff1a;&#xff08;总结&#xff09;STM32中USART原理及应用&#xff08;PC、BLE、ESP8266通信实现&#xff09;-CSDN博客 二&#xff0c;打…

C#实现画图,及实现图像运动,C#中GDI+图形图像技术(Graphics类、Pen类、Brush类)C#之快速入门GDI+绘图 C#实现快速画图功能

下载源码 <-------- 在C#的世界里&#xff0c;GDI如同一位多才多艺的艺术家&#xff0c;以其强大的绘图能力&#xff0c;让开发者能够轻松地在应用程序中挥洒创意&#xff0c;绘制出丰富多彩的图形世界。GDI不仅支持基本的几何图形绘制&#xff0c;还能处理复杂的图像处理任…

Python应用指南:高德交通态势数据

在现代城市的脉络中&#xff0c;交通流量如同流动的血液&#xff0c;交通流量的动态变化对出行规划和城市管理提出了更高的要求。为了应对这一挑战&#xff0c;高德地图推出了交通态势查询API&#xff0c;旨在为开发者提供一个强大的工具&#xff0c;用于实时获取指定区域或道路…

数据结构与算法Python版 图的应用与广度优先搜索

文章目录 一、图的应用-词梯问题二、图的广度优先搜索 一、图的应用-词梯问题 词梯问题 Word Ladder 从一个单词演变到另一个单词&#xff0c;其中的过程可以经过多个中间单词。要求是相邻两个单词之间差异只能是1个字母如FOOL变SAGE&#xff1a;FOOL >> POOL >>…

服务器数据恢复—服务器硬盘亮黄灯的数据恢复案例

服务器硬盘指示灯闪烁黄灯是一种警示&#xff0c;意味着服务器硬盘出现故障即将下线。发现这种情况建议及时更换硬盘。 一旦服务器上有大量数据频繁读写&#xff0c;硬盘指示灯会快速闪烁。服务器上某个硬盘的指示灯只有黄灯亮着&#xff0c;而其他颜色的灯没有亮的话&#xff…

Java SpringBoot使用EasyExcel导入导出Excel文件

点击下载《Java SpringBoot使用EasyExcel导入导出Excel文件(源代码)》 在 Java Spring Boot 项目中&#xff0c;导入&#xff08;读取&#xff09;和导出&#xff08;写入&#xff09; Excel 文件是一项常见的需求。EasyExcel 是阿里巴巴开源的一个用于简化 Java 环境下 Excel…

Deduction(演绎法)和Reduction(还原法)-关于中西方思维的差异

Deduction(演绎法)和Reduction(还原法)-关于中西方思维的差异 最近看到中国新一代战机上天的消息,感慨万千;忽然想起来两年多前一次爬山的时候,一个友人跟我大概说过,Deduction和Reduction分别对应了中国古代和西方古代以来的思考自然和技术发明的思想.于是又在这方面琢磨了一番…

unity学习6:unity的3D项目的基本操作

目录 1 unity界面的基本认识 1.1 file 文件 1.2 edit 编辑/操作 1.3 Assets 1.4 gameobject 游戏对象 1.5 组件 1.6 windows 2 这些部分之间的关系 2.1 关联1&#xff1a; Assets & Project 2.2 关联2&#xff1a;gameobject & component 2.3 关联3&#xff…