1 )如何生成 coredump 文件 ?bash
登录 LINUX 服务器,任意位置键入服务器
echo "ulimit -c 1024" >> /etc/profileapp
退出 LINUX 从新登录 LINUX测试
键入 ulimit -cui
若是显示 1024 那么说明 coredump 已经被开启。unix
1024 限制产生的 core 文件的大小不能超过 1024kb,可使用参数unlimited,取消该限制调试
ulimit -c unlimited内存
2 ) . core 文件的简单介绍开发
在一个程序崩溃时,它通常会在指定目录下生成一个 core 文件。 core 文件仅仅是一个内存映象 ( 同时加上调试信息 ) ,主要是用来调试的。it
3 ) . 开启或关闭 core 文件的生成
用如下命令来阻止系统生成 core 文件 :
ulimit -c 0
下面的命令能够检查生成 core 文件的选项是否打开 :
ulimit -a
该命令将显示全部的用户定制,其中选项 -a 表明“ all ”。
也能够修改系统文件来调整 core 选项
在 /etc/profile 一般会有这样一句话来禁止产生 core 文件,一般这种设置是合理的 :
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
可是在开发过程当中有时为了调试问题,仍是须要在特定的用户环境下打开 core 文件产生的设置。
在用户的 ~/.bash_profile 里加上 ulimit -c unlimited 来让特定的用户能够产生 core 文件。
若是 ulimit -c 0 则也是禁止产生 core 文件,而 ulimit -c 1024 则限制产生的 core 文件的大小不能超过 1024kb
4 ) . 设置 Core Dump 的核心转储文件目录和命名规则
/proc/sys/kernel/core_uses_pid 能够控制产生的 core 文件的文件名中是否添加 pid 做为扩展 ,若是添加则文件内容为 1 ,不然为 0
proc/sys/kernel/core_pattern 能够设置格式化的 core 文件保存位置或文件名 ,好比原来文件内容是 core-%e
能够这样修改 :
echo "/corefile/core-%e-%p-%t" > core_pattern
将会控制所产生的 core 文件会存放到 /corefile 目录下,产生的文件名为 core- 命令名 -pid- 时间戳
如下是参数列表 :
%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 添加命令名
5 ) . 使用 core 文件
在 core 文件所在目录下键入 :
gdb -c core
它会启动 GNU 的调试器,来调试 core 文件,而且会显示生成此 core 文件的程序名,停止此程序的信号等等。
须要关联产生core文件的程序文件进行调试,gdb中使用file命令进行关联
若是你已经知道是由什么程序生成此 core 文件的,好比 MyServer 崩溃了生成 core.12345 ,那么用此指令调试 :
gdb -c core MyServer
6 ) . 一个小方法来测试产生 core 文件
直接输入指令 :
kill -s SIGSEGV $$