Chinaunix首页 | 论坛 | 博客
  • 博客访问: 723047
  • 博文数量: 66
  • 博客积分: 2418
  • 博客等级: 大尉
  • 技术积分: 1659
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-28 10:04
个人简介

keep moving

文章分类

全部博文(66)

文章存档

2015年(2)

2014年(6)

2013年(7)

2011年(7)

2010年(42)

2009年(2)

分类: 嵌入式

2015-02-11 16:42:07

原文地址:linux使用core文件调试程序崩溃
参考:ulimit -c unlimited
1、简介
当系统中的一些程序在遇到一些错误以及crash时,系统会自动产生core文件记录crash时刻系统信息,包括内存和寄存器信息,
用以程序员日后debug时可以使用。这些错误包括段错误、非法指令、总线错误或用户自己生成的退出信息等等。


2、开启/关闭core文件
ulimit -c 可以查看是否打开core文件,输出信息为core文件大小最大值,0表示关闭core文件;
ulimit -c 0 可手动关闭
ulimit -c 1000 设置core文件大小最大为1000k
ulimit -c unlimited 设置core文件大小为无限制
一般,系统默认关闭core文件。如果希望系统默认开启core文件,需在/etc/profile中增加如下内容:
ulimit -c unlimited
并且,注释掉如下内容,如果有的话
ulimit -S -c 0 > /dev/null 2>&1


3、设置core dump文件存储位置和命名方式
在默认的情况下,很多系统的core文件是生成在你运行程序的目录下,或者你在程序中chdir后的那个目录,然后在core文件的后面加了一个 pid。
在实际工作中,这样可能会造成很多目录下产生core文件,不便于管理,实际上,在2.6下,core文件的生成位置和文件名的命名都是可以配置的。
/proc/sys/kernel/core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0。默认值为0
/proc/sys/kernel/core_pattern可以格式化core文件的保存位置和文件名,默认值为core。以下是参数列表:
    %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 添加可执行文件名
例如,echo "/app/tmp/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
系统产生的core文件将保存在/app/tmp目录下,并以“core.可执行文件文件名.进程pid.主机名.core文件生成时的unix时间”命名
当然,也可以用下列方式来完成
sysctl -w kernel.core_pattern=/app/tmp/core.%e.%p.%h.%t
但是,这些操作都是临时的,一旦系统重启则丢失
如果希望系统重启不丢失的话,需在你系统启动脚本中增加如下内容:
ulimit -c unlimited
echo "/app/tmp/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern


4、测试能否产生core文件
1)手动按照上面设置开启core文件和core命名方式,或者添加为系统启动自动运行后,重启系统
2)使用“kill -6 pid”杀死指定进程,应该可以在你设定的位置生成相应core文件


5、gdb调试core文件
gdb ./bin ./core.pid 
进入后,使用bt查看死掉时栈的情况


6、使用gdb生成core文件
gdb -p pid
进入后,使用generate-core-file命令,将在当前目录生成core.pid文件

原文地址:linux使用core文件调试程序崩溃
阅读(1987) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~