文章目录
- 核心转储文件的概念
- 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->会先进行核心转储,然后再进行终止进程。
所以我们向进程发送kill -1 进程pid
和kill -6 进程pid
是有区别的。当我们发送kill -1 进程pid
,会直接终止进程,没有多余动作;发送kill -6 进程pid
,会在异常错误后面显示(core dumped文件转储)的标志,并会在当前目录下生成核心转储文件。
在当前目录下生成的core.31574文件就是核心转储文件(很大)
当我们打开core.31574,发现是二进制文件,那么我们如何查看问题呢?
答案是:不用自己定位问题了,gdb自动定位问题。
(linux下默认是release版本,只有加上-g选项编译文件,才是debug版本。)
gdb 目标可执行文件
core-file core.31574//可以直接帮我们定位到代码的问题之处
验证操作
运行结果:
注意获取退出码,退出信号,是否有core dump的标记的方法