linux limit core,Linux 下的 Core Dump

"CoreDump是在进程异常终止时保存的用户空间内存数据,包含内存、寄存器、堆栈信息,用于Post-mortem Debug。通过`ulimit`命令可以控制是否生成及大小。一个例子是,发送SIGQUIT信号给程序,如`Ctrl-`,将生成core文件,然后使用gdb调试。开启CoreDump有助于分析和解决程序异常问题。"
摘要由CSDN通过智能技术生成

Core Dump的基本概念

当一个进程要异常终止时 ,可以选择把进程的用户空间内存数据全部保存到磁盘上 ,文件名通常是 core, 这叫做 Core Dump。通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,程序出错的时候理论上都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。

进程异常终止通常是因为有Bug, 比如,非法内存访问导致段错误 ,事后可以用调试器检查 core文件以查清错误原因 ,这叫做Post-mortem Debug 。一个进程允许产生多大的 core文件取决于进程的 Resource Limit( 这个信息保存 在 PCB中 )。

开启或关闭core文件

默认是不允许产生 core文件的 ,因为 core文件中可能包含用户密码等敏感信息 ,不安全;除此之外,每core dump一次就会产生一个core文件,次数多了占用内存空间,所以一般默认情况下是不允许生成core文件的,除非由于后台测试的需要,你自己对该项设置进行了更改。

$ ulimit -a

利用上面的命令我们可以查看系统设定的core文件选项:

cf37d303ee43e3f731243793ed72b698.png

在开发调试阶段可以用 ulimit 命令改变这个限制 ,允许产生 core文件。

$ ulimit -c [size]

例如:  用ulimit 命令改变Shell 进程的 Resource Limit,允许 core文件最大为 1024K。这样进程被down掉后,就会产生core文件了

7571abae66e677d4bae23313570dd905.png

$ ulimit -c 1024

当然,如果不想生成core文件,可以使用命令: $ ulimit -c 0

实 例

SIGQUIT信号(键入Ctrl-\) 的默认处理动作是终止进程并且core dump!

写一个死循环程序,前台运行这个程序,然后键入 Ctrl-\ ,使该进程收到SIGQUIT信号后终止并产生core文件

/*************************************************************************

> File Name: test.c

> Author:Lynn-Zhang

> Mail: iynu17@yeah.net

> Created Time: Fri 15 Jul 2016 03:03:57 PM CST

************************************************************************/

#include

int main()

{

printf("pid is :%d\n",getpid());

while(1);

return 0;

}

d2cbd3620a6fe9d2f97d3a1db38d12d1.png

这里的core.2678就是该进程被down掉所对应的core文件,其中的2678是该进程的pid。

ulimit 命令改变了Shell 进程的 Resource Limit,test进程的 PCB由 Shell进程复制而来 ,所以也具有和 Shell进程相同的 Resource Limit值 ,这样就可以产生 Core Dump了。

core文件的使用

在core文件所在目录下,gdb目标文件,它会启动GNU的调试器,来调试core文件,并且会显示 生成此core文件的程序名,中止此程序的信号等等

37f0dd2058ccdcd37b6ec2db3085f831.png

除此之外,core文件的内容是二进制的!

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值