前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Coredump(tracedump)

Coredump(tracedump)

作者头像
全栈程序员站长
发布2022-07-28 17:05:06
8040
发布2022-07-28 17:05:06
举报

大家好,又见面了,我是你们的朋友全栈君。

引言

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

开启 coredump

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

gdb 调试 core 文件

准备:

代码语言:javascript
复制
#include <cstdio>

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 文件

在这里插入图片描述
在这里插入图片描述

file core.22187 查看文件信息

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

开始调试:在 15 行发生段错误,信号 SIGSEGV 导致程序终止

在这里插入图片描述
在这里插入图片描述

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128540.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 开启 coredump
  • gdb 调试 core 文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档