core文件:内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试,默认生成位置与可执行程序位于同一目录下。
core文件的打开与关闭:
关闭或阻止core文件生成:
$ulimit -c 0
打开core文件生成:
$ulimit -c unlimited
这种方式只在此次调试中有效,虚拟机重启需重新设置。
ulimit -c 1024则限制产生的core文件的大小不能超过1024kb
ulimit -c unlimited进行设置,就可以把core文件的大小设置为无限大
开启core, 采集程序崩溃的状态
在 /etc/profile 最后一行添加 上面设置全局开启 core文件调试,大小不限. 最后 立即生效.
sudo vi /etc/profile
# No core files by default 0, unlimited is oo
ulimit -S -c unlimited > /dev/null 2>&1
source /etc/profile
生成的core文件同名会覆盖. 需要为其加上一个 core命名规则,在 /etc/sysctl.conf 文件中添加系统配置,立即启用
对于core后面的参数含义:
%%:相当于%
%p:相当于<pid>
%u:相当于<uid>
%g:相当于<gid>
%s:相当于导致dump的信号的数字
%t:相当于dump的时间
%e:相当于执行文件的名称
%h:相当于hostname
./core_%t_%p_%e :生成的文件位于当前目录_时间_进程号_可执行文件名
sudo vi /etc/sysctl.conf
# open, add core.pid
kernel.core_pattern = ./core_%t_%p_%e
kernel.core_uses_pid = 1
sysctl -p /etc/sysctl.conf
下面状态表示core启用了.
gdb -c core (-c指定core文件)
在不知道是哪个执行文件生成的core文件时,我们可以使用 gdb -c core_xx (-c指定core文件),这可以显示生成此core文件的可执行程序名,我的显示的是: Core was generated by ' ./break' , 说明我的可执行文件是break
然后执行 gdb break core_xx可调试代码错误
一般的段错误在执行gdb break core_xx 会显示错误的点