Coredump 详解

引言

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中(core文件),这种行为就叫做 Core Dump 或者叫做 ‘核心转储’,利用 coredump 可以帮助我们快速定位程序崩溃位置

开启 coredump

终端输入命令:ulimit -a 用来显示对进程的一些限制限制,其中第一行表示了 core 文件最大的大小限制(单位为 blocks)默认是 0
Coredump 详解_第1张图片

开启核心转储
终端输入:ulimit -c unlimited 不对生成的核心转储文件进行大小限制也可以指定大小,ulimit -c 查看
Coredump 详解_第2张图片

gdb 调试 core 文件

准备:

#include 

int test1(int a, int b) {
    return a+b;
}
void test2() {
    char* str = "hello~";
    str[0] = '0'; //段错误程序终止,生成core文件
}
void test3() {
    printf("world~~\n");
}

int main() {
    test1(1, 2);
    test2();
    test3();

    return 0;
}

./test 执行文件后 发生段错误程序终止,并且生成 core 文件
Coredump 详解_第3张图片
file core.22187 查看文件信息
在这里插入图片描述

gdb ./test core.22187 利用 gdb 进行 coredump 定位,可以看到程序终止是因为signal 11 并且段错误发生在第 15 行,因为 str[0] = ‘0’
Coredump 详解_第4张图片

开始调试:在 15 行发生段错误,信号 SIGSEGV 导致程序终止
Coredump 详解_第5张图片

你可能感兴趣的:(操作系统)