Core dump: 在程序运行过程中异常终止或崩溃,操作系统将当时的内存状态记录下来,保存在一个文件中。
其中会包含寄存器信息(包括程序指针,栈指针等),内存管理信息,操作系统状态等信息。
linux 中默认忽略 Stop信号、Terminate信号、Ignore信号等,如果信号在默认情况下,在下列几种信号发生时
会产生core dump: SIGQUIT(quit from keyboard ), SIGILL(illegal instruction), SIGABRT(abort signal),
SIGSEGV(invalid memory reference), SIGTRAP(trace/breakpoint trap)
ctrl+z 挂起进程 SIGTSTP信号(默认为暂停进程)
ctrl+c终止进程 SIGINT信号(默认为终止进程)
ctrl+\ (默认SIGQUIT信号)产生core dump
打开core dump:
在终端输入 ulimit -c ,输出为0,说明默认是关闭core dump的
输入 ulimit -c unlimited 开启core dump功能,并且不限制core dump文件的大小,如果要限制文件大小,
将unlimited改成需要的文件大小,单位为blocks(KB)
以上命令支队当前终端有效,如果永久有效,可以修改/etc/security/limits.conf文件,
增加一行:
#<domain> <type> <item> <value>
* soft core unlimited
修改core保存文件的路径
默认生在的core文件在可执行文件所在的目录下,文件名为core
通过修改/proc/sys/kernel/core_uses_pid文件可以让生成的core文件名是否自动加上pid号
如 echo 1> /proc/sys/kernel/core_uses_pid,生成的core文件名将会变成core.pid,其中pid表示进程的pid
通过修改 /proc/sys/kernel/core_pattern 来控制生成的core文件生成的路径和保存格式
如用echo "/tmp/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern 设置成core-命令名-pid-时间戳
gdb调式
gdb program core 来查看core文件,其中program为可执行程序名,core为生成的core文件名。
来源:oschina
链接:https://my.oschina.net/u/230704/blog/626275