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
相关文章
|
20天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
50 14
Linux 10 个“who”命令示例
|
9天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
84 20
|
9天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
35 7
|
29天前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
34 9
|
27天前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解
|
1月前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
133 3
|
1月前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
38 1
|
26天前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
43 1
|
4月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
69 10
|
4月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
156 3