Linux、Unix程序异常退出生成core文件

Linux、Unix中程序异常,可以自动生成core文件,类似windows的dump。

一般系统core文件大小默认限制为0,用ulimit命令查看和修改core文件的大小。

ulimit -c //查看当前限制
ulimit -c unlimited //unlimited不限制大小
ulimit -c 1000 //限制1000

#ulimit -a 查看系统的各种限制

如果想让设置永久生效,则需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf。

core文件保存路径

core文件创建在进程当前工作目录,使用ls core查看当前目录是否生成core文件。

找不到进程的当前目录时,可以通过file命令查看是否生成:file core
然后使用find或其它命令查找:find / -name core*

也可以查看”/proc/<pid>/cwd“来确定进程的当前目录

几种可以产生core文件的终止w/core 错误:

SIGABRT 异常终止(abort)
SIGBUS、SIGEMT、SIGIOT、SIGTRAP 硬件故障
SIGFPE 算术异常
SIGILL 非法硬件指令
SIGQUIT 终端退出符
SIGSEGV 无效存储访问
SIGSYS 无效系统调用
SIGXCPU 超过CPU限制(setrlimit)
SIGXFSZ 超过文件长度限制(setrlimit)

如下命令杀进程可以生成core文件:kill -s SIGSEGV pid

调试core文件

Linux下可以用GDB来调试core文件:gdb [exec file] [core file],如gdb core_test core

也有使用-c参数,如gdb -c core.pid program_name

GDB中键入where或者bt,就会看到程序崩溃时堆栈信息。

设置core文件保存位置和命名规则

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

如echo “/corefile/core-%e-%p-%t” >core_pattern
将core文件统一生成到/corefile目录下,文件名为“core-命令名-pid-时间戳”

参数列表:
%p – 添加pid
%u – 添加当前uid
%g – 添加当前gid
%s –  添加导致产生core的信号
%t – 添加core文件生成时的unix时间
%h -添加主机名
%e –  添加命令名

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注