IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 进程崩溃的根本原因(结合底层分析) -> 正文阅读

[系统运维]进程崩溃的根本原因(结合底层分析)

我们在使用VS出现程序崩溃的时候,程序出错时会显示错误信息,会定位到哪一行出错。下面我们将在Linux系统下分析进程崩溃的原因是什么怎么知道哪一行崩溃了


目录

一、进程崩溃的根本原因(结合底层分析)

二、如何知道哪一行崩溃了?

1、查看系统资源

2、运行程序

?3、使用core文件定位崩溃所在行


一、进程崩溃的根本原因(结合底层分析)

开始运行以后,用户层的代码加载到内存中,进程被创建出来让CPU开始运行,CPU中有一个状态寄存器,记录着计算结果,这个时候计算出错,错误信息会记录在状态寄存器中

OS作为硬件的管理者,硬件的状态异常,OS会立马识别到,然后OS就会循着路径,反过来知道这份代码是哪个进程的,那就说明这个进程的代码有问题,所以OS会给这个进程发送一个信号来中止这个进程

此时父进程也就是bash通过waitpid获取到子进程的状态码status,status & 0x7F就是中止信号,中止信号对应的内容就是我们所看到的错误信息

注意:如果有必要,OS还会设置退出信息中的core dump标志位,core dump标志位默认是0,当被设置为1的时候,OS会将进程中的数据转储到磁盘,生成一个名为core的文件,方便我们后期调试。并非每种中止信号都会设置core dump标志位

二、如何知道哪一行崩溃了?

要想知道具体是哪一行崩溃了,关键在于上面的core dump生成的core文件,8号信号和11号信号会生成core文件,我们先编写一个浮点数运算错误,故意让进程崩溃。下面就来了解如何通过core文件知道哪一行崩溃了

1、查看系统资源

在命令行输入 ulimit -a查看系统资源,我们会发现系统没有给core文件分配空间,这样的话,core dump的标志位在任何情况下都是 0 ,即不存储核心数据。

?所以我们手动分配一下core文件的大小,在命令行输入 ulimit -c 1024,这里的 -c 是core file size 对应的选项,我们可以使用这个选项修改大小,然后我们再重新看一下系统资源,这个时候core文件默认大小就被设置成了1024 (?注意:core文件最大不超过1024K)

2、运行程序

make出错先暂时无视,因为还是会正常生成 执行文件,然后我们直接运行这个执行文件,和之前相比多了“core dumped”,说明核心数据被存起来了

?我们在当前目录下,就会看到core文件了

?3、使用core文件定位崩溃所在行

其实本质上还是要通过gdb调试来定位,所以我们要在Makefile中加一个 -g 来显示详细的调试信息

(1) 重新make一下

(2) 命令行输入 gdb ./test 进入调试模式

(3) 输入core-file命令来解析core文件,即core-file? core.5405

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-04 07:32:52  更:2022-05-04 07:33:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:58:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码