linux中core dump开启使用教程

Posted carlos_zhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中core dump开启使用教程相关的知识,希望对你有一定的参考价值。

**一、什么是coredump**


我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。


通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。


**二、cored dump开启**


1、暂时生效

ulimit -c unlimited


2、永久生效

修改/etc/security/limits.conf


* soft core unlimited

* hard core unlimited


3、永久生效

修改/etc/profile


ulimit -c unlimited


**三、设置core文件的名称和文件路径**

默认生成路径:输入可执行文件运行命令的同一路径下

默认生成名字:默认命名为core。新的core文件会覆盖旧的core文件


a.设置pid作为文件扩展名


1:添加pid作为扩展名,生成的core文件名称为core.pid

0:不添加pid作为扩展名,生成的core文件名称为core

修改 /proc/sys/kernel/core_uses_pid 文件内容为: 1

修改文件命令:


echo "1" > /proc/sys/kernel/core_uses_pid

或者

sysctl -w kernel.core_uses_pid=1 kernel.core_uses_pid = 1


b. 控制core文件保存位置和文件名格式


修改文件命令: echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

或者:

sysctl -w kernel.core_pattern=/corefile/core.%e.%p.%s.%E

可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳

以下是参数列表:

%p - insert pid into filename 添加pid(进程id)

%u - insert current uid into filename 添加当前uid(用户id)

%g - insert current gid into filename 添加当前gid(用户组id)

%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 添加导致产生core的命令名


3.测试是否能生成core文件

kill -s SIGSEGV $$

查看/corefile目录下是否生成了core文件


如果是需要测试go程序是否能生成core文件,需要设置环境变量GOTRACEBACK=crash


4.调试core文件

Eg. test.c


#include<stdio.h>

int main()

{

     int *p = NULL;

     *p = 0;

     return 0;

}

root@ubuntu:~# gcc -o test test.c

root@ubuntu:~# ./test

Segmentation fault (core dumped)

bingo:这里出现段错误并生成core文件了

在/corefile目录下发现core-test-31421-1476266571

开始调试

gdb ./test core-test-31421-1476266571



根据堆栈信息查看bug


5. 基本GDB命令

为了定位问题,常常需要进行单步跟踪,设置断点之类的操作。


下边列出了GDB一些常用的操作。


启动程序:run

设置断点:b 行号|函数名

删除断点:delete 断点编号

禁用断点:disable 断点编号

启用断点:enable 断点编号

单步跟踪:next (简写 n)

单步跟踪:step (简写 s)

打印变量:print 变量名字 (简写p)

设置变量:set var=value

查看变量类型:ptype var

顺序执行到结束:cont

顺序执行到某一行: util lineno

打印堆栈信息:bt

以上是关于linux中core dump开启使用教程的主要内容,如果未能解决你的问题,请参考以下文章

Linux开启core-dump简单总结

Linux开启core-dump简单总结

Linux 打开core dump功能

Linux Dump 内存

RedHat Linux下如何生成core dump文件

linux下调试core dump文件