core dump文件

原文地址:http://blog.csdn.net/hjx5200/article/details/43192431

在程序运行过程中,发生segmentation fault,如果系统提示core dumped,说明为产生core文件。core文件会保存程序运行时的信息,如内存镜像、堆栈调用、寄存器等等,利用相关的工具如gdb可以还原程序发生问题时的情况,便于定位问题代码。

core文件是否生成,以及在哪里生成和文件名等情况,涉及如下文件/proc/sys/kernel/core_uses_pid、/proc/sys/kernel/core_pattern、/proc/sys/kernel/core_pile_limit、/proc/sys/fs/suid_dumpable。首先执行ulimit -c,如果输出结果为0表明系统不能生产core文件,这时可以执行ulimit -c unlimited,使得可以生产core文件,并且不限制core文件的大小。生成的core的文件名则由core_pattern和core_uses_pid共同决定。其中core_pattern有两种模式,一直是直接决定文件名和路径,比如/data/core/core.%e.%p.%s,表明core文件保存在data下面的core目录下,且文件名的格式是core后面加程序名pid号和引发错误的段信号值。

  • %% 单个%字符
  • %p 所dump进程的进程ID
  • %u 所dump进程的实际用户ID
  • %g 所dump进程的实际组ID
  • %s 导致本次core dump的信号
  • %t core dump的时间 (由1970年1月1日计起的秒数)
  • %h 主机名
  • %e 程序文件名

core_pattern的另一个模式是管道模式,以“|”开头,然后跟要执行的程序的绝对路径,如在ubuntu 12.04中,core_parttern文件的内容是“|/usr/share/apport/apport %p %s %c”且core_pipe_limit为0。当通过管道将内存镜像保存时,进程/proc/pid下面的内容不能立即删除,必须等到apport程序保存完内存信息后才可删除,否则信息流失不利于问题定位,这时core_pipe_limit的值决定了 系统中运行并发访问/proc/pid的进程数,如果为0表示不限制并发进程数量。/usr/share/apport/apport是Python脚本,带入的参数由上面的流程的符号意义可知,是进程ID号、导致本次core dump的信号和core文件是否限制limit的值。suid_dumpable文件的值可能为0、1和2。意义不同,0是表明不能产生core文件,1表明debug模式,任何进程都可以产生core,2表明生成的core文件只有root用户可读。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值