Linux——gdb|准备工作查看代码|r命令|断点相关命令|逐语句|逐过程|调用堆栈|冯诺依曼结构

简介: 笔记

准备工作


1.png

注意makefile要加-g选项

我们写一段代码,并且使用makefile

输入gdb 可执行程序:进入调试模式


输入quit退出gdb模式

查看代码

l 0:从第0行开始显示代码

若想继续显示后面的代码,我们不断按回车即可,因为gdb具有记忆功能,当未输入指令时,按回车它会执行最近一次的指令

r命令


r:开始调试,如果没有设置断点,就直接运行结束

image.png

此时未设置断点,直接出结果了,相当于vs下按F 5

断点相关命令


b 行号:可以打断点

查看断点 info b

注意第一列num,删断点时要用到

d num:去断点

有断点之后输入r,就可以跑到断点处

逐语句|逐过程|调用堆栈


n:逐过程(等同于vsF10)


p 变量名:打印变量内容


s:逐语句


bt:查看当前调用堆栈


finish:将当前函数跑完,就停下来


display 变量名:长显示变量


undisplay :取消长显示


until:跳转到指定行,对一个函数局部跳转


c或continue:运行至下一个断点处停下来


disa 序号:关闭断点


enable:打开断点


断点在第22行,输入n没有进入函数,直接来到下一条语句,第23行语句是回车

当我们想查看函数里,result值是多少时,输入p result,可直接查看

再次按r会重新调试

输入s会进入函数里面



输入bt可查看调用堆栈



当进入函数后又想退出,输入finish即可,之后我们发现函数已经跑完了,我们可以看到结果4950,此时我们输入bt,发现已经没有刚才函数的栈帧了


进入循环



如果想查看当前i时多少,输入display i



如果想查看当前地址输入p &i,p是打印只显示一次



如果想取消长显示,输入undisplay i是不能取消的



我们在设置常显示值之后,前面是有编号的,undisplay 编号 取消常显示



此时就看不到i了



若想跳出循环,这里直接想跳到15行 until 15,此时结果已经出来


.



如果想由一个断点直接跳到下一个断点


修改一下程序,便于观察




输入c直接跳转



这行是显示断电的打开与关闭状态



disa 序号:可关闭该序号断点



输入disa关闭所有断点


enable可打开断点



也可加序号



冯诺依曼结构  


cpu读取数据(数据+代码),都是要从内存中读取,站在数据的角度骂我们人为cpu不和外设直接交互


cpu要处理数据,需要先将外设中的数据,加载到内存,站在数据的角度,外设之和内存打交道


程序要运行,必须先被加载到内存中,因为体系结构的特点决定



管理:先描述,在组织


操作系统要给用户提供一个稳定,安全,简单的执行环境


习题 1

冯诺依曼体系结构中数据输入设备的有?A D


A.键盘


B.显示器


C.内存


D.磁盘


注意:内存不是输入设备


习题2

不属于冯诺依曼体系结构必要组成部分是:B


A.CPU


B.Cache


C.RAM


D.ROM


CPU   运算器与控制器,Cache 缓存(一种技术), RAM 内存(存储器),ROM 磁盘(输入输出设备)


冯·诺依曼 提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成( 运算器 、 控制器 、 存储器 、 输入设备 、 输出设备 )

习题3

冯诺依曼体系结构计算机的基本原理是?


A.信息存储


B.存储智能


C.数字控制


D.存储程序和程序控制


D


计算机就是为了完成指定的数据处理,而通过指令按指定流程完成指定功能,指令的合集就是一段程序。说白了计算机就是按照指定的指令执行流程完成对指定数据的处理


习题4

操作系统的主要功能有(A)


A.控制和管理计算机系统软硬件资源


B.对汇编语言,高级语言和甚高级语言程序进行翻译


C.管理用各种语言编写的源程序


D.管理数据库文件


操作系统的定位就是控制和管理计算机上软硬件资源让计算机更加好用,因此A选项是 正确的

对汇编语言,高级语言和甚高级语言程序进行翻译,这个功能是编译器的功能,将高级语言解释为机器指令能够被机器识别执行。因此B选项不正确,这不是操作系统的主要功能,而是一个外部应用的主要功能

源程序以及数据库文件都是存储在磁盘上的,这是操作系统中,文件系统管理部分的主要功能,因此C和D选项不正确。


习题5

下面关于系统调用的描述中,错误的是(B)


A.系统调用把应用程序的请求传输给系统内核执行


B.系统调用函数的执行过程应该是在用户态


C.利用系统调用能够得到操作系统提供的多种服务


D.是操作系统提供给编程人员的接口


E.系统调用给用户屏蔽了设备访问的细节


F.系统调用保护了一些只能在内核模式执行的操作指令


系统调用是操作系统向上层提供的用于访问内核特定功能的接口。

A正确,应用程序通过系统调用将自己需要完成的功能传递给内核,进行执行完成

B错误,系统调用的运行过程是在内核态完成的,操作系统并不允许用户直接访问内核,也就是说用户运行态并不满足访问内核的权限。

C正确,因为系统调用就是想上层提供用于完成特定内核服务或功能的。

D正确,

E正确,用户只需要将自己的请求以及数据通过系统调用接口传递给内核,内核中完成对应的设备访问过程,最终返回结果正确

F正确,系统向上层提供系统调用接口用于访问内核服务或功能的很大原因也是因为这样可以最大限度的保护内核的稳定运行。


习题6

下面的函数哪个是系统调用而不是库函数()?


A.printf


B.scanf


C.fgetc


D.read


E.print_s


F.scan_s


库函数是用户对系统调用接口的进一步封装接口

printf函数是glibc中封装的用于实现格式化输出的接口

scanf函数是glibc中封装的用于实现格式化输入的接口

fgetc函数是glibc中封装的用于实现从输入流中获取字符的接口

read是系统提供的用于从输入设备获取数据的接口

print_s以及scan_s这两个函数不存在,至少在C语言的常见典型的跨平台移植代码库中不存在


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
9月前
|
存储 Linux iOS开发
【Linux】冯诺依曼体系与操作系统理解
本文深入浅出地讲解了计算机体系的两大核心概念:冯诺依曼体系结构与操作系统。冯诺依曼体系作为现代计算机的基础架构,通过中央处理器、存储器和输入输出设备协同工作,解决了硬件性能瓶颈问题。操作系统则是连接硬件与用户的桥梁,管理软硬件资源,提供运行环境。文章还详细解析了操作系统的分类、意义及管理方式,并重点阐述了系统调用的作用,为学习Linux系统编程打下坚实基础。适合希望深入了解计算机原理和技术内幕的读者。
257 1
|
存储 缓存 Linux
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
|
存储 Linux C语言
Linux:冯·诺依曼结构 & OS管理机制
Linux:冯·诺依曼结构 & OS管理机制
362 0
|
Linux 调度
Linux系统结构
内核是操作系统的核心组件,负责管理系统资源和硬件设备。它提供了硬件抽象层,使得应用程序不必直接操作硬件。内核的主要功能包括: 进程管理:创建、调度和终止进程。 内存管理:分配和回收内存,提供虚拟内存功能。 设备管理:控制硬件设备的访问。 文件系统管理:管理文件和目录结构。 系统调用接口:提供系统调用,使应用程序能够与操作系统交互。
119 8
|
缓存 Linux
揭秘Linux内核:探索CPU拓扑结构
【10月更文挑战第26天】
286 1
|
缓存 运维 Linux
深入探索Linux内核:CPU拓扑结构探测
【10月更文挑战第18天】在现代计算机系统中,CPU的拓扑结构对性能优化和资源管理至关重要。了解CPU的核心、线程、NUMA节点等信息,可以帮助开发者和系统管理员更好地调优应用程序和系统配置。本文将深入探讨如何在Linux内核中探测CPU拓扑结构,介绍相关工具和方法。
289 0
|
存储 缓存 安全
Linux基础——冯诺依曼体系结构与操作系统
Linux基础——冯诺依曼体系结构与操作系统
183 1
Linux基础——冯诺依曼体系结构与操作系统
|
存储 缓存 安全
【Linux】冯诺依曼体系结构与操作系统及其进程
【Linux】冯诺依曼体系结构与操作系统及其进程
335 1
|
网络协议 算法 Unix
Linux源码学习笔记01-Linux内核源码结构
Linux源码学习笔记01-Linux内核源码结构
|
监控 安全 Linux
systemd-cgls:Linux中的Cgroup层级结构查看利器
`systemd-cgls`是Linux工具,用于查看Cgroup层级结构,协助管理员管理资源。它以树形结构显示cgroup及其资源使用,用于监控、性能调优和安全隔离。通过`--no-page`, `--all`, `--full`等参数可定制输出。结合`systemd-cgtop`等工具,定期监控和配置资源限制,实现系统优化。