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
相关文章
|
3月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
468 1
二、Linux文本处理与文件操作核心命令
|
3月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
323 137
|
3月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
740 57
|
2月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
518 2
|
3月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
335 0
Linux内存问题排查命令详解
|
3月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
315 16
|
4月前
|
Linux 网络安全 开发工具
技术栈:这50条最常用的 Linux 命令你一定要会!
建议多在终端中实践,遇到不懂的命令就用 man 或 --help 了解详情!
554 0
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
424 1
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
227 10
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
861 3