Linux下生成Core Dump文件的方法(总结)
日常工作中,不可避免的出现程序跑飞崩溃等情况.此时,我们需要coredump文件的支撑.但总有一些时候,莫名其妙的无法生成coredump.本文,针对此问题,描述该如何生成一个coredump,需要具备哪些条件.剩下的,请各位看官自行比对.Coredump定义Coredump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情...
文章目录
日常工作中,不可避免的出现程序跑飞崩溃等情况.此时,我们需要coredump文件的支撑.但总有一些时候,莫名其妙的无法生成coredump.
本文,针对此问题,描述该如何生成一个coredump,需要具备哪些条件.
剩下的,请各位看官自行比对.
Coredump定义
Coredump叫做核心转储,它
是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个文件里。
该文件也是二进制文件,可以使用gdb、elfdump、objdump或者windows下的windebug、solaris下的mdb进行打开分析里面的具体内容。
注:core是在半导体作为内存材料前的线圈,当时用线圈当做内存材料,线圈叫做core。用线圈做的内存叫做core memory。
Linux下 生成Core Dump文件的方法:
内核必须打开选项 CONFIG_ELF_CORE
一般默认都打开.
配置每个进程的RLIMIT_CORE资源为RLIM_INFINITY
ulimit -c unlimited
调试的进程,不能捕捉相关信号.
进程发生段错误时,如果当前进程有捕捉SIGSEGV信号,那么,不会生成coredump文件.否则,能够产生.
至此,coredump文件,可生成,
默认生成路径:输入可执行文件运行命令的同一路径下.
默认生成文件名称:文件名是core
在根文件系统的根目录下创建名为 .init_enable_core 的空文件:touch /.init_enable_core
此条件,实测不是必须的.
修改core文件的生成路径
为方便管理维护,一般会指定core文件的生成路径.
echo "/var/crash/coredump.%e.%p" > /proc/sys/kernel/core_pattern
core_pattern参数含义:
%% 单个%字符
%p 所dump进程的进程ID
%u 所dump进程的实际用户ID
%g 所dump进程的实际组ID
%s 导致本次coredump的信号
%t coredump的时间戳
%h 主机名
%e 程序文件名
即重定向 /proc/sys/kernel/core_pattern的内容到/var/crash/文件夹下,
当然,如果这个重定向的文件夹不存在,则需要创建.
详解,请参考Documentation/sysctl/kernel.txt中core_pattern部分。
更多推荐
所有评论(0)