core文件的作用:
当程序崩溃时,内核有可能把该程序当前内存映射到core文件中,方便程序员找到程序出现问题的地方,最常出现的,几乎所有C程序员都出现过的“段错误”了。也是最难查出问题原因的一个错误
core文件是什么:
核心文件(core file),也称为核心转存(core dump),是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试
core文件相关的操作:
1.查看core文件开关,ulimit -a,如果core file size为0,则说明core file产生还没打开
2.ulimit -c 1024(1024是core文件的大小),将core文件打开并给一个文件的大小
3.此时再次出现段错误则会产生core文件
4.cat /proc/sys/kernel/core_uses_pid查看生成的core文件是否添加pid作为扩展
如果为0,说明生成的core文件就是core文件
如果为1,说明生成的core文件格式为core.xxxx;
可以通过修改这个文件中的值来修改生成的core文件的名称
也可以通过命令:echo "1" > /proc/sys/kernel/core_uses_pid来修改值
5.cat /proc/sys/kernel/core_pattern,可以查看core文件保存的位置和文件名格式
可以通过命令:echo "/corefile/core-%e-%p-%t" > core_pattern,可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:
%p-添加pid
%u-添加当前uid
%g-添加当前gid
%s-添加导致产生core的信号
%t-添加core文件生成时的unix时间
%h-添加主机名
%e-添加命令名
core文件的查看:
core文件需要使用gdb查看。
方式1:
gdb ./a.out
core-file core.xxxx(core.xxxx就是core文件名)
使用bt命令即可看到程序出错的地方
方式2:
gdb -core=core.xxxx(core.xxxx就是core文件名)
file ./a.out
bt
方式3:
gdb -c core.xxxx(core.xxxx就是core文件名)
file ./a.out
bt
方式2、3两种命令的效果相同,但是有些环境下不生效,所以推荐使用方式1
gdb -core=core.xxxx(core.xxxx就是core文件名)
file ./a.out
bt