目录
1.gdb的简单介绍
1.1程序发布版本
程序的发布一般都是两个版本,debug模式和release模式,在linux里面的gcc/g++编译出来的这个结果默认就是release模式,要想使用这个gdb进行调试,这个时候就必须在表一的时候加上-g选项,在debug的模式下面进行;
1.2前期准备
我们时候要进行安装gdb和环境的搭建,这个gdb好像是默认就有的,我们可以使用这个gdb --version指令查看,如果出现这个对应的版本说明这个就是存在的;
环境搭建,就是我们需要有一个供我们使用的源文件,这个里面我自己是那这个mycode.c文件举例子,生成的结果是使用mycode进行标记;
下面的这个就是一个简单的C语言代码作为,mycode.c文件内容:
这个之前介绍的这个依赖关系,依赖方法还是要有的,第二行的-g就表示这个是debug版本的,可以进行调试,其他的这个makefile文件的内容都是不变的;
1.3调试开始和结束
gdb后面加上这个当前目录下面的生成的文件的名字,出现的这个括号gdb加上这个闪动的光标就是想要我们输入这个调试的相关的指令;
我们输入q之后按下enter键就可以结束这个程序的调试过程;
1.4调试的相关指令
1.4.1设置断点
这个里面的7,8表示的就是这个程序的第七行和第八行;
1.4.2单步执行
就是使用的next指令,这个调试就会按照这个程序代码顺序一行一行的执行;
1.4.3运行程序
run指令,这个运行起来之后就回到有断点的位置暂停程序;
1.4.4查看变量的数值
print x这个x就是我们自己定义的变量,查看对应的定义变量的数值;
1.4.5断点之间跳转
使用continue指令可以有第一个断点直接跳转到第二个断点
1.4.6查看调试程序的代码
l 0表示从第0行开始显示代码,多执行几次l就会显示出来所有的代码,一次性无法完全显示;
2.进程入门
2.1简单回顾
上一次我们介绍了这个操作系统以及相互关联的架构之间的层状关系,操作系统通过驱动程序实现对于软硬件资源的管理,通过先描述,后组织的方式实现对于软硬件的管理;
2.2进程初识
一个加载到操作系统里面的程序,实际上就是一个进程,一个操作系统里面,一次不只是运行一个进程,可以同时运行多个进程;
当需要加载多个进程的时候,操作系统就需要对于这个进程进行管理,如何管理进程呢?实际上这个管理的方法就是先描述,再组织;
任何一个进程,加载到我们的内存里面的时候,形成真正的进程的时候,操作系统首先会去创建描述进程的结构体对象PCB(进程化模块),实际上这个对象就如同其他的面型对象的编程语言,这个PCB就是一个关于这个进程的所有的属性的集合;
2.3进程属性
上面介绍到首先创建结构体对象,属性包括状态,进程编号,优先级等等;
根据进程的PCB(模块对象),还会把这个进程对应的代码和数据加载到内存里面去;
进程==内核PCB+自己的数据和代码;
当有多个进程的时候,对进程进行管理,相当于就是对于单链表进行增删查改;
因为这个PCB里面有一个指针会指向代码和数据,操作系统只需要管理PCB,PCB对于这个代码和数据进行管理,这样操作系统只需要管理PCB即可;
多个进行的时候,会出现指针的指向,这样多个进程像链表一样排列起来,我们对于进程的管理相当于是对于链表进行增删查改;每一个PCB只会对于自己的数据和代码进行管理,排队的时候也是PCB在排队,当轮到某一个PCB的时候,这个PCB回去调用自己的数据和代码;
2.3linux里面的PCB
tast_struct就是linux里面的PCB,是linux里面的一种数据类型;
task_struct里面包含的属性有:标识符,状态,优先级,程序计数器,上下文数据,I/O状态记录,内存指针等所有的属性;
linux里面使用双向链表组织进程
2.4查看进程
查看进程的指令就是ls /proc,这个proc实际上就是一个linux下面的目录;
当前目录概念:我们创建一个文件,我们没有去指定这个文件的位置,但是这个系统会在当前的目录下面去自动的创建一个文件,这个是因为进程记住自己所在的目录,所以即使我们没有指定这个位置,他也会在当前的目录下面进行文件的创建;
kill -9 进程编号 这个指令就可以叉掉这个进程;
2.5查看进程的标识符
我们上面已经介绍了这个进程的标识符是进程的一个属性,我们可以使用getpid这个系统调用接口去查看这个进程的标识符,我们可以使用getppid这个接口去查看这个进程的父进程;
我们的任何一个进程都是bash进程的一个子进程,这个basn进程就是所有进程的父进程,这个bash对应的标识符可以使用对应的命令进行查看;
2.6创建进程
我们可以使用运行程序方式,运行的时候就回去产生一个进程;
我们可以使用fork去创建一个进程,fork有两个返回值,父子进程代码共享,但是数据会各自去开辟空间。