Linux下使用coredump

本文详细介绍了在Linux环境下如何查看、设置coredump文件大小,包括如何永久生效,以及coredump文件的存储位置。同时,文章还讲解了如何通过gdb分析coredump文件,并列举了常见导致coredump的信号。

1、查看当前coredump文件大小设置状态
使用ulimit -c 或 ulimit -a 命令
在这里插入图片描述
若值为0,表示coredump文件大小为0,默认不使用coredump。
2、设置coredump文件大小
“ulimit -c [size]” 例,ulimit -c 80;
“ulimit -c unlimted” 不限制文件大小

永久生效办法:
#vi /etc/profile 然后,在profile中添加:
ulimit -c 1073741824
(但是,若将产生的转储文件大小大于该数字时,将不会产生转储文件)
或者
ulimit -c unlimited
这样重启机器后生效了。 或者, 使用source命令使之马上生效。
#source /etc/profile
在这里插入图片描述
3、coredump文件的存储位置
core文件默认的存储位置与对应的可执行程序在同一目录下,文件名是core,大家可以通过下面的命令看到core文件的存在位置:
cat /proc/sys/kernel/core_pattern
缺省值是core
自定义存储文件路径:
sudo sysctl -w kernel.core_pattern = ./core_log/core.%e.%p

%% 单个%字符
%p 所dump进程的进程ID
%u 所dump进程的实际用户ID
%g 所dump进程的实际组ID
%s 导致本次core dump的信号
%t core dump的时间 (由1970年1月1日计起的秒数)
%h 主机名
%e 程序文件名
4、在工程目录下创建文件夹core_log目录,生成的coredump文件将存在其中
在这里插入图片描述
测试代码:maintest.c

#include<stdio.h>
int main()
{
	int *p=NULL;
	*p=0;
	return 0;
}

5、gdb查看coredump文件
在这里插入图片描述
gdb core core.maintest.5395
在这里插入图片描述
常见的会产生core文件的信号:
• SIGABRT 调用abort函数时产生此信号。进程异常终止。

• SIGBUS 指示一个实现定义的硬件故障。

• SIGEMT 指示一个实现定义的硬件故障。

EMT这一名字来自PDP-11的emulator trap 指令。
• SIGFPE 此信号表示一个算术运算异常,例如除以0,浮点溢出等。

• SIGILL 此信号指示进程已执行一条非法硬件指令。
4.3BSD由abort函数产生此信号。SIGABRT现在被用于此。

• SIGIOT 这指示一个实现定义的硬件故障。
IOT这个名字来自于PDP-11对于输入/输出TRAP(input/output TRAP)指令的缩写。系统V的早期版本,由abort函数产生此信号。SIGABRT现在被用于此。

• SIGQUIT 当用户在终端上按退出键(一般采用Ctrl-\)时,产生此信号,并送至前台进
程组中的所有进程。此信号不仅终止前台进程组(如SIGINT所做的那样),同时产生一个core文件。

• SIGSEGV 指示进程进行了一次无效的存储访问。
名字SEGV表示“段违例(segmentation violation)”。

• SIGSYS 指示一个无效的系统调用。由于某种未知原因,进程执行了一条系统调用指令,
但其指示系统调用类型的参数却是无效的。

• SIGTRAP 指示一个实现定义的硬件故障。
此信号名来自于PDP-11的TRAP指令。

• SIGXCPU SVR4和4.3+BSD支持资源限制的概念。如果进程超过了其软C P U时间限制,则产生此信号。

• SIGXFSZ 如果进程超过了其软文件长度限制,则SVR4和4.3+BSD产生此信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值