linux工具—gdb调试~~进程

1.简介gdb调试工具1.1程序发布版本

通常,程序发布有两种版本:调试模式(debug)和发布模式(release)。在linux中,使用gcc/g++编译时,默认生成的是release模式。要使用gdb进行调试,必须在编译时加入-g选项,以便生成debug模式的程序。

linux工具—gdb调试~~进程1.2前期准备

开始调试前,需要安装gdb和搭建环境。gdb通常是系统自带的,可以通过gdb –version命令检查其是否存在及版本信息。

环境准备包括准备一个可用的源文件,这里以mycode.c为例,其生成的程序将标记为mycode。

以下是一个简单的c语言代码示例,作为mycode.c的内容:

linux工具—gdb调试~~进程在编译时,-g选项表示生成的是调试版本,Makefile文件的其他内容保持不变。

linux工具—gdb调试~~进程1.3调试的开始与结束

启动gdb调试只需在gdb命令后加上当前目录下的生成文件名。看到gdb提示符(gdb)和闪烁的光标,即可输入调试命令。

输入q并按下回车键,即可结束调试过程。

linux工具—gdb调试~~进程1.4调试相关命令1.4.1设置断点

linux工具—gdb调试~~进程这里的7和8表示程序的第7行和第8行设置断点。

1.4.2单步执行

linux工具—gdb调试~~进程使用next命令,程序会按代码顺序逐行执行。

1.4.3运行程序

linux工具—gdb调试~~进程使用run命令启动程序,运行到断点处暂停。

1.4.4查看变量值

linux工具—gdb调试~~进程使用print x命令查看变量x的值。

1.4.5断点间跳转

linux工具—gdb调试~~进程使用continue命令可从第一个断点直接跳转到第二个断点。

1.4.6查看调试程序代码

使用l 0命令从第0行开始显示代码,多次执行l命令会逐步显示所有代码。

linux工具—gdb调试~~进程2.进程入门2.1简要回顾

上次我们讨论了操作系统及其与硬件架构的层级关系。操作系统通过驱动程序管理软硬件资源,并通过描述和组织的方式实现对这些资源的管理。

2.2进程初识

加载到操作系统中的程序就是进程。操作系统可以同时运行多个进程。

当需要加载多个进程时,操作系统需要管理这些进程,管理方式是先描述后组织。

当一个进程加载到内存中成为真正的进程时,操作系统会创建一个描述进程的结构体对象,称为PCB(进程控制块)。PCB类似于面向对象编程中的对象,包含进程的所有属性。

2.3进程属性

PCB包含状态、进程编号、优先级等属性。

根据PCB,操作系统会将进程的代码和数据加载到内存中。

进程=内核PCB+自己的数据和代码。

管理多个进程类似于对单链表进行增删查改操作。

PCB中包含指向代码和数据的指针,操作系统只需管理PCB,PCB则管理代码和数据。

多个进程通过指针连接成链表,进程管理相当于对链表进行增删查改操作。每个PCB仅管理自己的数据和代码,排队时是PCB在排队,当轮到某个PCB时,它会调用自己的数据和代码。

linux工具—gdb调试~~进程2.3Linux中的PCB

在Linux中,task_struct是PCB的一种数据类型,包含标识符、状态、优先级、程序计数器、上下文数据、I/O状态记录、内存指针等属性。

Linux使用双向链表组织进程。

2.4查看进程

使用ls /proc命令查看进程,/proc是Linux中的一个目录。

linux工具—gdb调试~~进程当前目录概念:创建文件时,若未指定位置,系统会在当前目录下自动创建文件,因为进程记住自己的目录位置。

使用kill -9 进程编号命令可以终止进程。

2.5查看进程标识符

进程标识符是进程的一个属性,可以使用getpid系统调用查看当前进程的标识符,使用getppid查看父进程的标识符。

任何进程都是bash进程的子进程,bash进程是所有进程的父进程,可以通过相应命令查看其标识符。

2.6创建进程

运行程序时会生成一个进程。

使用fork系统调用可以创建新进程,fork返回两个值,父子进程共享代码,但数据在各自的内存空间中独立存在。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享