linux coredump 调试

1.设置core文件的最大值
命令:
ulimit - get and set user limits
参数:
-c 设置core文件的最大值.单位:blocks (-core)
ulimit -c :查看core文件的最大值,输出为0表示文件大小为0,即没有core dump文件输出。
ulimit -c unlimited :不限制生成core dump文件的大小。
(
在linux平台下,设置core dump文件生成的方法:
1) 在终端中输入ulimit -c 如果结果为0,说明当程序崩溃时,系统并不能生成core dump。
2) 使用ulimit -c unlimited命令,开启core dump功能,并且不限制生成core dump文件的大小。如果需要限制,加数字限制即可。ulimit - c 1024
3) 默认情况下,core dump生成的文件名为core,而且就在程序当前目录下。新的core会覆盖已存在的core。通过修改/proc/sys/kernel/core_uses_pid文件,可以将进程的pid作为作为扩展名,生成的core文件格式为core.xxx,其中xxx即为pid
4) 通过修改/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件格式。例如:将所有的core文件生成到/corefile目录下,文件名的格式为core-命令名-pid-时间戳. echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
)
2 测试代码
coredump_test.c

#include <stdio.h>

int main()
{
    int i;
    for(i=0;i<10;i++){
        printf("%d ",i);
    }
    printf("\n");
    int *p=NULL;
    *p = 100;//操作空指针,程序崩溃
    return 0;
}

3 编译

gcc -g coredump_test.c -o coredump_test

4 运行

ulimit -c unlimited
ly@ly:~$ ulimit -c
unlimited
ly@ly:~$ ./coredump_test 
0 1 2 3 4 5 6 7 8 9 

段错误 (核心已转储)
如果没用:
ulimit -c unlimited
不会生成coredump文件(默认文件名:core)。
5

gdb ./coredump_test  core

输出:
。。。

Core was generated by `./coredump_test'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00000000004005c2 in main () at coredump_test.c:11
11      *p = 100;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值