_gdb和进程概念

news2024/11/25 12:30:59

gdb

在windows下的vs2013下,我们可以进行调试,方便我们了解程序的具体的运行步骤和存在的问题,那么在Linux中,也存在这样一种调试机制,gdb就是在Linux系统下的调试指令。

Linux下和Windows下的调试的区别

答:调试的思路一定是一样的。

调试的方法一定是不同的,因为我们正常使用的Linux系统是没有可视化界面的,一般是以命令行的形式,所以Linux的调试方法和Windows一定会有所不同。

我们创建一个文件来进行gdb的练习操作:

 我们创建一个普通文件mytest.c

我们使用vim对文件内容进行编辑

 我们为了方便gdb的使用,写了三个函数块,main函数调用AddToVal函数,这个函数返回sum值,接下来,我们调用Print函数,这个函数打印sum和时间戳。

接下来,我们创建一个文件Makefile,使用vim来编辑依赖对象和依赖关系

 我们对这些代码进行翻译:

mytest的依赖对象是mytest.c,表示mytest是由mytest.c生成的。

依赖方法是这样:使用gcc进行编译链接,把mytest.c源文件经过编译链接形成可执行程序mytest

.PHONY:表示声明我们的clean没有依赖对像。

依赖方法是删除mytest文件。

我们使用make,形成可执行程序

 gdb指令:

下载指令:sudo yum install gdb

 

经过下载安装之后,我们可以使用gdb指令。

 进行gdb调试:gdb加+可执行程序文件名

 退出gdb调试:输入q

 默认情况下,gdb无法对release版本进行调试,调试只能在debug版本下进行,在Linux系统下,gcc默认生成的可执行程序默认是release版本,所以无法进行调试,我们可以这样操作:

 加上 -g表示gcc形成的可执行程序是mytest文件。

总结:gcc在默认使用时,使用的是动态链接

生成的可执行程序默认是release版本。

 为什么软件发布要有两个版本?

答:release版本是留给用户使用的,用户并不需要调试或者了解调试方法,debug版本是留给程序员的。

debug版本相当于就是release版本下又添加了调试信息。

 debug版本下,我们的文件占的内存是9816.

 release版本下,我们的文件占的内存是8472.

gdb环境下的l

 可以显示文件的内容

 再输入空格,可以显示更多的文件的内容。

假如我们想要从最开始开始显示:

l +数字:

 表示从第一行开始显示

假设我们要从第0行数字开始显示:

 打断点b 加数字

例如:假设我们要在第9行设置一个断点,我们可以输入b 9

 查看断点 info b

 Num代表断点的编号

删除断点 d 编号

注意删除断点不能使用d +所在行

例如:假如我们要删除编号为1的断点,该断点在第九行,我们不可以用d 9 ,可以用d 1

 

我们删除断点之后再来查看断点:

 

 调试运行:r

我们设置几个断点:

 我们设置两个断点,一个在第20行,一个在第22行

我们输入r

 逐过程:next 

 我们现在指针指向第20行,我们输入n,n表示逐过程:

 函数的逻辑应该是进入sum函数,但是我们的n逐过程并不会直接进入函数。

逐语句:step

 我们输入s,逐语句进行调试:

 我们直接进入add函数。

c:表示从一个断点跳到下一个断点:

我们设置三个断点,分别在第19行 第20行 第21行

我们按下运行,跳到第一个7断点处

 我们输入c

跳到下一个断点的位置。

bt查看函数调用堆栈:

 我们设置22行的断点:

 我们按下r,进行调试运行:

 然后我们按下bt,查看函数调用的堆栈:

 调用的是main函数的堆栈

finish直接跑完这个函数停下来:

我们设置一个新断点

在第5行,我们按下bt查看函数调用的堆栈

 

 假如我们想要结束Print函数,我们输入finish

 回车执行上一个指令:

 我们输入l 1,然后再按回车

 相当于执行l 1指令。

p命令查看变量对应的值

 我们先设置断点在第9行(进入AddToVal函数的内部)

我们使用p来查看变量from和to的内容

 display常显示变量

 

 

 

 接下来,我们进行调试的时候,这些变量的值就能够常显示了。

对于地址,也是可以常显示了。

接下来,我们再进行调试:

 

undisplay:取消常显示变量:

 注意:undisplay修饰的是编号:

 

 我们继续调试:

我们常显示的变量就消失了。

 until跳到指定行:

例如:

 我们在第20行打一个断点

 我们进行运行:

 假设我们想要运行到第22行,我们输入until 22

 接下来,我们就运行到了第22行。

p+变量名打印变量值:

 我们设置第11行的断点,然后进行运行:

 我们可以打印几个变量

 

 set var+变量名:修改变量的值:

 info locals显示局部变量:

我们在这一行,假如我们要显示局部变量的话,可以这样做:

 

 进程:

冯诺依曼体系结构

 这里的存储器指的是内存,内存具有掉电易失的性质。

磁盘可以叫做外存,具有永久性的存储能力。

磁盘也叫做外设,外部设备,外设非为输入设备和输出设备。

鼠标键盘等都是输入设备,显示器,打印机都是输出设备。

运算器+控制器组成cpu,存取速度块

存储器是内存,存取速度较快

外设存取速度较慢。

cpu智能被动的接收数据,这个数据来自于哪里?

答:从临时存储和永久存储中取。

为什么cpu只接受内存传递的数据,而不与外设打交道?、

答:本质是为了提高效率,因为cpu的存取速度大于内存大于外设,假设由外设向cpu输入数据时,速度由外设来决定,而外设的存取数据的速度非常慢,内存中天然的没有数据,外设的数据就被传到了内存中,内存就有了数据,当cpu读取过数据后,再把数据返回给内存,内存再定时刷新给外设。

操作系统的作用:

操作系统就是内存和外设之间的桥梁,内存和外设的交互策略由操作系统来决定。

结论:

1:cpu不和外设打交道,和内存打交道

2:所有的外设,有数据需要载入时,只能载入到内存中,内存有数据需要输出时,只能输出到外设中去。

程序运行为什么要加载到内存中去?

答:因为cpu要处理我们的代码的话,只能从内存中接收数据,所以我们的程序运行必须加载到内存中去。

cpu的组成:

cpu包括运算器和控制器,控制器相当于提示器,提示我们运算完成,输出完成信号。

运算器包括逻辑运算和数学运算,逻辑运算就是if语句等判断语句,数学计算就是二进位制的计算。

思考题:

 

答:假如我们输入了你好,首先是我们的键盘作为输入设备,输入你好给内存,内存再把数据传递给cpu,cpu经过加密处理和运算再把对应的二进位制数据返还给内存,内存再把数据传递给网卡,网卡存储了两份,一份刷新给我们的显示器,一份通过网络传递到另外一个计算机的网卡上,网卡把数据传递给内存,内存把数据传递给cpu,cpu经过加密运算和解析,把数据返还给内存,有内存数据给显示器,刷新到显示器上。

 操作系统:

操作系统是一个进行软硬件资源管理的软件

为什么要管理?

答:通过合理的管理手段,为用户提供良好的环境。

 通过操作系统,实现硬件和软件的交互,方便用户操作。

 

 

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

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

相关文章

如何在保证身份安全的同时提升员工体验

自疫情以来越来越多的企业员工的工作方式都发生了改版。远程和线上下混合工作形式已经成了新常态,企业员工希望随时随地都能访问其工作资源。而且为了方便办公他们更希望使用多种设备(甚至是个人设备)来访问公司数据。 运维有小邓 在如此复杂…

网上商城购物系统设计与实现(Java+Web+SSM+MySQL)

目 录 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 开发工具及技术 1 2 需求分析 3 2.1 功能需求分析 3 2.1.1 网站前台功能 3 2.1.2 网站后台功能 3 2.2 性能分析 3 2.3 系统用户用例图 4 3 系统设计 5 3.1 系统的总体设计 5 3.2 数据库的分析与设计 5 3.2.1数据库概念设计…

DDR PCB设计布线时,拓扑结构的选择

在PCB设计时我们在处理DDR部分的时候都会进行一个拓扑的选择,一般DDR有T点和Fly-by两种拓扑结构,那么这两种拓扑结构的应用场景和区别有哪些呢? T点拓扑结构:CPU出来的信号线经过一个过孔后分别向两边进行连接,分叉点一般在信号的…

哪款蓝牙耳机打电话好用?打电话用的蓝牙耳机推荐

我们需要集中精神,闹中取静。特别是工作或者学习的时候,为了让意志力力更加集中,提高工作或者学习的效率,或是对于一个热爱音乐的人来说,蓝牙耳机肯定是必不可少的;蓝牙耳机现在的功能有很多,质…

锐捷交换机系统安装与升级

锐捷交换机系统安装与升级 文章目录锐捷交换机系统安装与升级一、实验步骤二、实验实施1、到锐捷官网下载交换机型号对应的系统文件2、配置本机IP,与将要升级设备互联3、打开文件中的TFTPserver4、进入BOOT模式恢复系统交换机在MGMT的情况下,通过MGMT口来…

主数据管理系统mdm哪个产品好,为什么,越详细越好?

当企业对主数据管理不善时,会出现数据冗余、数据不一致、业务低效、数据孤岛等问题,多个系统之间的数据难以协调,难以发挥数据的价值。这时我们就需要对企业主数据进行管理。 亿信华辰前不久在“2022中国数字经济创新发展大会”上荣获“2022年…

艾美捷QuickTiter 逆转录病毒定量试剂盒的制备方案

Cell Biolabs艾美捷QuickTiter逆转录病毒定量试剂盒提供了一种测定逆转录病毒滴度的快速方法。该测定法测量逆转录病毒的病毒核酸含量,可以在纯化病毒之前或之后进行。 试剂的制备: •1X QuickTiter™ 解决方案C:准备1X QuickTiter™ 溶液C通…

[Linux] 常用命令--文件操作grep/nl/more/less/head tail/set

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

【仿牛客网笔记】项目进阶,构建安全高效的企业服务——将文件上传至云服务器

使用七牛云,首先进行注册,注册之后认证。 https://www.qiniu.com 登录七牛云 查看手册 存储的时候使用对象存储 SDK 存储空间 域名30天,到期后重新创建 具有独立域名可以绑定域名。 再创建一个空间为community_share 在项目中引用七牛云 首先…

python的继承知识点总结

python继承,python丰富的类因为继承而变得多姿多彩,如果语言不支持继承,那么类就没什么优势。 1、首先我们来定义两个类 一个dog类,一个bird类class Dog: def sleeping(self): print (dog 正在睡觉) def speaking(…

指纹浏览器是什么?可以用来解决广告投放的什么问题?

说到指纹浏览器,相信很多跨境电商人都不陌生,但是很多小伙伴不知道的是,指纹浏览器对于广告投放来说也是非常有帮助的工具!为什么呢?今天,东哥就跟大家聊一聊指纹浏览器到底为什么适合用于广告投放和广告营…

项目管理中,项目干系人的角色和责任

项目干系人是指企业内部或外部的团体、单位、个人或组织,他们受到项目结果的影响,或能够影响到项目的结果。主要干系人是干系人的一个子集,由于他们直接受到项目结果变化的影响,如果他们的支持被撤回,将导致项目失败。…

D1. 388535 (Easy Version)(异或+二进制位)

Problem - 1658D1 - Codeforces 这是该问题的简单版本。两个版本的约束条件的差异在下面用红色标出。只有当所有版本的问题都解决了,你才能进行黑客攻击。 Marin和Gojou正在和一个数组玩捉迷藏。 Gojou最初执行了以下步骤。 首先,Gojou选择了2个整数l…

如何选择合适的 API 网关

如今,API 网关是设计具有多个 API 服务或微服务的分布式系统架构的重要组成部分。这篇文章帮助您了解什么是 API 网关、何时以及为何使用它,并指导您如何为您的应用程序选择最佳的 API 网关解决方案。 什么是 API 网关? API 网关是一种服务…

【项目_02】隐藏tabbar、对城市数据进行获取、处理、渲染到页面上、城市回显 | 基于Vue3全家桶

💭💭 ✨:隐藏tabbar、对城市数据进行获取、处理、渲染到页面上 | 旅途拾景   💟:东非不开森的主页   💜: 怎么会没有遗憾呢,一直向前就对了💜💜   🌸: 如有…

考 PMP 证书真有用吗?

有用还是有用的,但是毕竟是一纸证书,本身的作用有限,还是要看就业环境看行业对 PMP 证书的重视程度,目前来说,pmp 在行业还是吃香的。 ​ 一、PMP 证书的市场需求 1、行业认可度高,市场需求大 PMP 是由…

【附源码】计算机毕业设计JAVA郑工社团交流服务信息平台

【附源码】计算机毕业设计JAVA郑工社团交流服务信息平台 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: …

2009(408)数据结构有关链表代码题

算法思想 第一种(普通算法):遍历链表,输出链表的长度,比较链表长度与k的关系,若长度小于k则失败,返回数值0。如果长度大于k,将指针移动到第倒数第k个位置,输出data的值,…

个性化邮箱:wodMailbox ActiveX 组件-PJ

wodMailbox ActiveX 组件 邮箱 ActiveX 组件(MIME BASE64、BINHEX、UUDECODE、QUOTED-PRINTABLE 解码) ...提供对邮箱和消息解析的完整 MIME 管理。您可以轻松地访问邮箱、计数消息、检查消息、计数部分、保存附件、查看标题、删除消息等。当wodMailBox打…

iOS证书和描述文件申请详情步骤

因为之前在iOS开发这条道路上吃了很多不必要的亏,特此想把自己的经验分享给大家,对于初学者来讲不是上架App Store购买一个黑苹果是不划算的,简单的内测或者玩玩完全是浪费钱啊(有钱可忽略),特此介绍一个小…