CORE DUMP 核心转储
所谓核心转储是指当进程因为异常而终止时,把进程中的内存数据保存一份到硬盘上的过程。
进程异常终止通常是因为有bug,比如野指针,除0等导致段错误,
我们可以利用Core Dump检查文件出现异常的原因,这个过程称为事后调试。
使用ulimit命令设置core文件的大小
ulimit -c unlimited //设置corefile的大小为不限制大小;
ulimit -c 1024//因为core file size的大小默认为0,通过ulimit命令设置为1024K
定位segment fault错误思路:一般是使用gdb进行问题定位,gdb需要有core-dump文件。
编译可执行程序时,需要加上-g选项,便于后期问题定位;
修改corefile的输出路径,新建一个/corefile文件夹,然后输入chmod 777开设权限;
通过echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern,来修改输出文件名格式即可;
如果程序在运行过程中奔溃,则在/corefile目录下会自动生成对应的core-dump文件;
gdb调试:gdb ./xxxx --core=/corefile/xxxxxxx;
进入gdb之后,输入bt命令查看出错时的函数调用栈,会精确到具体的代码行;
然后输入bt full, 就可以查看到详细的调用栈,这样就可以根据显示的信息,找到崩溃的地方。
%p - 进程的pid
%u - 当前的uid
%g - 当前的gid
%s - 产生coredump的信号
%t - 产生coredump的时间戳
%h - 主机名
%e - 可执行文件的名称
gdb programname
(gdb)core core_file