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
相关文章
|
4天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
1天前
|
Ubuntu Linux Shell
linux免交互登陆远程主机并执行命令(密钥对和Expect)
linux免交互登陆远程主机并执行命令(密钥对和Expect)
|
1天前
|
Linux
【Linux】常用命令
【Linux】常用命令
20 0
|
1天前
|
安全 Ubuntu Linux
Linux 网络操作命令Telnet
Linux 网络操作命令Telnet
11 0
Linux 网络操作命令Telnet
|
2天前
|
Linux 数据安全/隐私保护
Linux常用命令实例带注释
Linux常用命令实例带注释
28 0
|
2天前
|
Linux 开发工具 数据安全/隐私保护
Linux(19)常用解压命令记录
Linux(19)常用解压命令记录
7 0
|
4天前
|
Linux Perl
Linux系统替换字符串常用命令
请注意,`sed`命令可以非常强大,可以根据不同的需求使用不同的选项和正则表达式来进行更复杂的字符串替换操作。
16 0
|
6天前
|
安全 Linux 开发工具
Linux中可引起文件时间戳改变的相关命令
【4月更文挑战第12天】Linux中可引起文件时间戳改变的相关命令
14 0
|
8天前
|
域名解析 网络协议 Linux
Linux 中的 Nslookup 命令怎么使用?
【4月更文挑战第12天】
29 6
Linux 中的 Nslookup 命令怎么使用?
|
9天前
|
运维 网络协议 Unix
18.系统知识-Linux常用命令
18.系统知识-Linux常用命令