linux coredump介绍

在程序异常退出时,内核会生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。


1.core文件的生成开关和大小限制

 1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。

 2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。 若ulimit -c unlimited,则表示core文件的大小不受限制。

 如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。

2.core文件的名称和生成路径

1)/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core。

可通过以下命令修改此文件:

echo "1" > /proc/sys/kernel/core_uses_pid

2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。

可通过以下命令修改此文件:

echo "/corefile/core-%e-%p-%t" > core_pattern,可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳

以下是参数列表:

    %p - insert pid into filename 添加pid

    %u - insert current uid into filename 添加当前uid

    %g - insert current gid into filename 添加当前gid

    %s - insert signal that caused the coredump into the filename 添加导致产生core的信号

    %t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间

    %h - insert hostname where the coredump happened into filename 添加主机名

    %e - insert coredumping executable name into filename 添加命令名


3.core文件的查看

 core文件需要使用gdb来查看。

 gdb ./a.out

 core-file core.xxxx

 使用bt命令即可看到程序出错的地方。 

或者直接: arm-linux-gdb  a.out  core.xxxxx


4.core管道模式

core_pipe_limit这个是与core_pattern配合使用的,且仅当core_pattern中的字符是以“|”开头时方才生效。

当core_pattern中的字符以“|”开头时,文件中的后续字符被当做一个命令来执行,这样生成的core dump不会生成文件而是作为这个程序的标准输入(在这个程序中可通过open 和read fd0得到core信息)。这个程序充当了core文件处理程序(一般称之为管道core文件模式)

例如:Ubuntu中就是 "|/usr/share/apport/apport %p %s %c"

当配置成管道core文件模式时,内核通过管道搜集core信息,偶尔部分有用的数据信息要从崩溃程序的/proc/pid目录中活动。为了能够安全的获得数据,不能过早的清除崩溃程序的/proc/pid目录,而必须等待搜集数据信息完毕。反过来,如果用户空间的一个行为不正确的数据搜集程序从/proc/pid目录中获得数据就可能一直阻止内核对/proc/pid的崩溃进程进行回收。

core_pipe_limit这个文件定义了可以有多少个并发的崩溃程序可以通过管道模式传递给指定的core信息收集程序。如果超过了指定数,则后续的程序将不会处理,只在内核日志中做记录。0是个特殊的值,当设置为0时,不限制并行捕捉崩溃的进程,但不会等待用户程序搜集完毕方才回收/proc/pid目录(就是说,崩溃程序的相关信息可能随时被回收,搜集的信息可能不全)。发布时,默认值为0。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值