core dump(介绍,status中的core dump标志,应用--调试),ulimit命令

目录

core dump(核心转储)

引入

介绍 

core dump标志 

引入

介绍

应用 -- gdb调试

注意点 

ulimit命令

-a

-c

示例 -- core file大小问题


core dump(核心转储)

引入

  • 我们可以看到,不同的signal对应不同的编号和action:
  • 其中action主要分为term和core
  • term就是终止的意思
  • 而core是什么呢?

介绍 

  • 在进程由于某些错误(如段错误)而终止时,操作系统可能会生成core转储文件
  • (其实就是,如果被发送带有core属性的信号,就会产生core文件)
  • 这个文件包含了进程在崩溃时的内存映像,可以用于调试
  • 该文件大小可以被设置
  • 如果文件大小为0,即使应该发生核心转储,也不会生成core文件

core dump标志 

引入

在之前介绍wait函数时,它有一个参数status,用于保存进程退出信息:

它用bit位存储信息,其中低8位存储被信号杀死时的信息:

第8位就是core dump标志:

介绍

如果杀死它的信号带有core dump属性,就会将第8位赋为1

读取该bit位,就可以让os知道,到底要不要将该进程在内存中的核心数据转存到磁盘上

应用 -- gdb调试

void test2(){                    
   int a=1;                       
   a/=0;                          
} 

代码运行结果:

会发现它对应的就是8号信号:

生成core文件后,使用gdb调试:

直接加载core文件,可以定位到发生异常的位置:

注意点 

  • 一般生产环境中,core dump是关闭的
  • 因为如果出现问题,主机并不会直接关闭,而是重启服务
  • 但一运行就挂,一运行就挂,会产生非常多的core文件,最终可能会导致磁盘爆满
  • 而虚拟机一般是默认开启的(因为它用于测试和开发)

ulimit命令

-a

可以查看有关各种系统资源的硬资源和软资源限制的信息

-c

可以查看或设置shell 会话的核心转储文件大小限制

当前是0:

设置为1024后:

示例 -- core file大小问题

其中3号信号会发生核心转储,所以使用3为例子:

当core file 大小为0时,发送3号信号,并没有生成core文件:

不为0时:

所以可以说明,文件大小会影响最终到底有没有生成core文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值