【Linux之拿捏信号2】核心转储文件core dump

文章目录

    • 核心转储文件的概念
    • ulimit命令
    • Term和core


核心转储文件的概念

Linux系统级别提供了一种能力,在一个进程出现异常的时候,OS可以将该异常进程的核心代码部分进行核心转储,将内存中进程的相关代码数据,全部dump到磁盘中,一般会在当前进程的运行目录下,形成core.pid(核心转储文件)这样的二进制文件。但是这个服务在linux下默认是关闭的,因为core.pid(核心转储文件)很大,程序每运行一次,都会生成一个core文件,所以问题很大。

ulimit命令

ulimit -a命令

功能:显示目前资源限制的设定。

若想要在linux下设置观察到这个文件,我们需要做一些设置,方法如下:

如何打开和关闭核心转储功能?

采用ulimit命令进行设置:当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),这种文件就被称为核心文件(core file)。-c为限制每个核心文件的最大容量。

//linux下初始默认值为0
ulimit -c <core文件上限>  //设定core文件的最大值,单位为区块。
			
ulimit -c 0 //取消core dump

Term和core

功能:Term和core的功能都是终止进程。
区别:Term->终止进程,没有多余动作;core->会先进行核心转储,然后再进行终止进程。

【Linux之拿捏信号2】核心转储文件core dump_第1张图片

所以我们向进程发送kill -1 进程pidkill -6 进程pid是有区别的。当我们发送kill -1 进程pid,会直接终止进程,没有多余动作;发送kill -6 进程pid,会在异常错误后面显示(core dumped文件转储)的标志,并会在当前目录下生成核心转储文件。
【Linux之拿捏信号2】核心转储文件core dump_第2张图片
在当前目录下生成的core.31574文件就是核心转储文件(很大)
在这里插入图片描述
当我们打开core.31574,发现是二进制文件,那么我们如何查看问题呢?

答案是:不用自己定位问题了,gdb自动定位问题。
(linux下默认是release版本,只有加上-g选项编译文件,才是debug版本。)

gdb 目标可执行文件
core-file core.31574//可以直接帮我们定位到代码的问题之处

验证操作

【Linux之拿捏信号2】核心转储文件core dump_第3张图片
运行结果:
注意获取退出码,退出信号,是否有core dump的标记的方法
【Linux之拿捏信号2】核心转储文件core dump_第4张图片

你可能感兴趣的:(Linux操作系统,linux,服务器,数据库)