1、简介
当系统中的一些程序在遇到一些错误以及crash时,系统会自动产生core文件记录crash时刻系统信息,包括内存和寄存器信息,
用以程序员日后debug时可以使用。这些错误包括段错误、非法指令、总线错误或用户自己生成的退出信息等等。
2、开启/关闭core文件
ulimit -c 可以查看是否打开core文件,输出信息为core文件大小最大值,0表示关闭core文件;
ulimit -c 0 可手动关闭
ulimit -c 1000 设置core文件大小最大为1000k
ulimit -c unlimited 设置core文件大小为无限制
一般,系统默认关闭core文件。如果希望系统默认开启core文件,需在/etc/profile中增加如下内容:
ulimit -c unlimited
并且,注释掉如下内容,如果有的话
ulimit -S -c 0 > /dev/null 2>&1
3、设置core dump文件存储位置和命名方式
在默认的情况下,很多系统的core文件是生成在你运行程序的目录下,或者你在程序中chdir后的那个目录,然后在core文件的后面加了一个 pid。
在实际工作中,这样可能会造成很多目录下产生core文件,不便于管理,实际上,在2.6下,core文件的生成位置和文件名的命名都是可以配置的。
/proc/sys/kernel/core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0。默认值为0
/proc/sys/kernel/core_pattern可以格式化core文件的保存位置和文件名,默认值为core。以下是参数列表:
%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 添加可执行文件名
例如,echo "/app/tmp/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
系统产生的core文件将保存在/app/tmp目录下,并以“core.可执行文件文件名.进程pid.主机名.core文件生成时的unix时间”命名
当然,也可以用下列方式来完成
sysctl -w kernel.core_pattern=/app/tmp/core.%e.%p.%h.%t
但是,这些操作都是临时的,一旦系统重启则丢失
如果希望系统重启不丢失的话,需在你系统启动脚本中增加如下内容:
ulimit -c unlimited
echo "/app/tmp/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
4、测试能否产生core文件
1)手动按照上面设置开启core文件和core命名方式,或者添加为系统启动自动运行后,重启系统
2)使用“kill -6 pid”杀死指定进程,应该可以在你设定的位置生成相应core文件
5、gdb调试core文件
gdb ./bin ./core.pid
进入后,使用bt查看死掉时栈的情况
6、使用gdb生成core文件
gdb -p pid
进入后,使用generate-core-file命令,将在当前目录生成core.pid文件
原文地址: linux使用core文件调试程序崩溃
当系统中的一些程序在遇到一些错误以及crash时,系统会自动产生core文件记录crash时刻系统信息,包括内存和寄存器信息,
用以程序员日后debug时可以使用。这些错误包括段错误、非法指令、总线错误或用户自己生成的退出信息等等。
2、开启/关闭core文件
ulimit -c 可以查看是否打开core文件,输出信息为core文件大小最大值,0表示关闭core文件;
ulimit -c 0 可手动关闭
ulimit -c 1000 设置core文件大小最大为1000k
ulimit -c unlimited 设置core文件大小为无限制
一般,系统默认关闭core文件。如果希望系统默认开启core文件,需在/etc/profile中增加如下内容:
ulimit -c unlimited
并且,注释掉如下内容,如果有的话
ulimit -S -c 0 > /dev/null 2>&1
3、设置core dump文件存储位置和命名方式
在默认的情况下,很多系统的core文件是生成在你运行程序的目录下,或者你在程序中chdir后的那个目录,然后在core文件的后面加了一个 pid。
在实际工作中,这样可能会造成很多目录下产生core文件,不便于管理,实际上,在2.6下,core文件的生成位置和文件名的命名都是可以配置的。
/proc/sys/kernel/core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0。默认值为0
/proc/sys/kernel/core_pattern可以格式化core文件的保存位置和文件名,默认值为core。以下是参数列表:
%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 添加可执行文件名
例如,echo "/app/tmp/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
系统产生的core文件将保存在/app/tmp目录下,并以“core.可执行文件文件名.进程pid.主机名.core文件生成时的unix时间”命名
当然,也可以用下列方式来完成
sysctl -w kernel.core_pattern=/app/tmp/core.%e.%p.%h.%t
但是,这些操作都是临时的,一旦系统重启则丢失
如果希望系统重启不丢失的话,需在你系统启动脚本中增加如下内容:
ulimit -c unlimited
echo "/app/tmp/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
4、测试能否产生core文件
1)手动按照上面设置开启core文件和core命名方式,或者添加为系统启动自动运行后,重启系统
2)使用“kill -6 pid”杀死指定进程,应该可以在你设定的位置生成相应core文件
5、gdb调试core文件
gdb ./bin ./core.pid
进入后,使用bt查看死掉时栈的情况
6、使用gdb生成core文件
gdb -p pid
进入后,使用generate-core-file命令,将在当前目录生成core.pid文件
原文地址: linux使用core文件调试程序崩溃