Linux发行版不同,Coredump文件所出现的目录也会有所不同,这篇文章以CentOS 7.6下Coredump文件的路径设定方法为例,进行简单的说明。
[root@host131 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@host131 ~]# uname -a
Linux host131 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@host131 ~]#
最简单的方式可以使用如下步骤进行验证
首先确认ulimit -c的值
[root@host131 ~]# ulimit -c
0
[root@host131 ~]#
可设定core文件的大小为unlimited或者指定的最大Size
[root@host131 ~]# ulimit -c unlimited
[root@host131 ~]# ulimit -c
unlimited
[root@host131 ~]#
执行命令:sysctl -w kernel.core_pattern=/var/crash/core.%u.%e.%p
命令说明:此命令将coredump文件缺省会保存至/var/crash目录下,文件名称格式为core.%u.%e.%p
执行示例如下
[root@host131 ~]# sysctl -w kernel.core_pattern=/var/crash/core.%u.%e.%p
kernel.core_pattern = /var/crash/core.%u.%e.%p
[root@host131 ~]#
验证core文件有多种方式,比如
使用sleep 100命令提供产生coredump的进程,此处进程号为15032
[root@host131 ~]# sleep 100 &
[1] 15032
[root@host131 ~]# ps -ef |grep sleep |grep -v grep
root 15032 6129 0 06:38 pts/2 00:00:00 sleep 100
[root@host131 ~]#
发送SIGQUIT至此进程
[root@host131 ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@host131 ~]# ls /var/crash/
[root@host131 ~]# kill -3 15032
[root@host131 ~]#
[1]+ Quit (core dumped) sleep 100
[root@host131 ~]#
确认coredump文件名称和位置
[root@host131 ~]# ls /var/crash/
core.0.sleep.15032
[root@host131 ~]#
比如使用如下示例代码,执行时肯定会产生coredump
[root@host131 ~]# cat create_coredump.c
int main() {
return 1/0;
}
[root@host131 ~]#
编译生成可执行文件a.out
[root@host131 ~]# gcc create_coredump.c
create_coredump.c: In function ‘main’:
create_coredump.c:2:11: warning: division by zero [-Wdiv-by-zero]
return 1/0;
^
[root@host131 ~]# ls a.out
a.out
[root@host131 ~]#
执行生成coredump文件
[root@host131 ~]# ls /var/crash/
core.0.sleep.15032
[root@host131 ~]# ./a.out
Floating point exception (core dumped)
[root@host131 ~]#
[root@host131 ~]# ls /var/crash/
core.0.a.out.15868 core.0.sleep.15032
[root@host131 ~]#
另外还可以使用gcore等产生Coredump文件,但gcore命令在gdb所在的包中,需要安装gdb,此处不再赘述。
不同操作系统对此可能有所不同,另外此处演示只是作用与当前终端,重启或者新起终端仍然可用是需要设定配置文件/etc/sysctl.conf,这些在使用时都需要注意。