跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C

调试段错误利器:开启和使用 Core Dump(进程信号·叁)

Linux 中的 Core Dump 标志用于进程异常终止时的核心转储,通过记录进程上下文数据形成 core 文件,方便事后调试定位出错行。与 Term 终止方式不同,Core Dump 需要 ulimit -c 开启,且可能包含敏感信息。文章通过示例代码演示了子进程除零错误导致 Core Dump 的情形,并探讨了信号处理机制中 OS 的角色、信号延迟处理及存储位置等问题。

MqEngine发布于 2026/3/22更新于 2026/10/268.1K 浏览
调试段错误利器:开启和使用 Core Dump(进程信号·叁)

Core Dump 标志

在上一章节中,我们提到 Core 和 Term 默认都是终止进程,只有在一些情况会出现区别:

信号有的是可以追踪的,有的是可以不被追踪的,core dump 表示不需要被追踪了。

还记得这张图吗?当时我们在讲如果进程出现异常了,低 7 位表示退出信号,但是还有一位在那时并没有讲,而今天终于可以揭露这层面纱了。

先提出一个问题:如果我的进程出现异常了,我想不想知道是什么原因导致异常的?(像 9 号、2 号这种信号就不需要,因为这是用户自己想退出的,因此默认行为是 Term)

那肯定是想知道的,如除以 0 和野指针这种异常,我想知道是代码的哪一行导致了我的进程崩溃的。

  • core dump:表示核心转储,该标志位,表示的就是退出信号的详细退出类型。
  • OS 会在进程结束的时候,把进程当前运行的上下文数据,dump 转而存储到当前目录下,形成一个 core 文件!这个文件可以让我们进行调试使用,定位出错行!(一种事后调试 Post-mortem Debug)
  • 一个进程允许产生多大的 core 文件取决于进程的 Resource Limit(这个信息保存在 PCB 中)。默认是不允许产生 core 文件的,因为 core 文件中可能包含用户密码等敏感信息,不安全。
  • 在开发调试阶段可以用 ulimit 命令改变这个限制,允许产生 core 文件。用 ulimit 命令改变 Shell 进程的 Resource Limit,如允许 core 文件最大为 1024K:$ ulimit -c 1024.

Core vs Term

在 ulimit -c 开启 core 时,core 形式终止,会发生 core dump,term 不会;关闭时,二者等同。

int main() {
    pid_t id = fork();
    if (id == 0) {
        // 子进程
        sleep(2);
        int a = 10;
        a /= 0;
        exit(1);
    }
    int status = 0;
    pid_t rid = waitpid(id, &status, 0);
    if (rid > 0) {
        printf("exit code:%d , exit signal:%d , core dump:%d\n", (status >> 8) & 0xFF, status & 0x7F, (status >> 7) & 0x1);
    }
    return 0;
}

思考

  • 上面所说的所有信号产生,最终都要有 OS 来进行执行,为什么?OS 是进程的管理者
  • 信号的处理是否是立即处理的?在合适的时候
  • 信号如果不是被立即处理,那么信号是否需要暂时被进程记录下来?记录在哪里最合适呢?
  • 一个进程在没有收到信号的时候,能否能知道,自己应该对合法信号作何处理呢?
  • 如何理解 OS 向进程发送信号?能否描述一下完整的发送处理过程?
  • 总结

    Linux 中的 coredump 标志用于进程异常终止时的核心转储,通过记录进程上下文数据形成 core 文件,方便事后调试。与 Term 终止方式不同,coredump 需要 ulimit-c 开启,且可能包含敏感信息。文章通过示例代码演示了子进程除零错误导致 coredump 的情形,并探讨了信号处理机制中 OS 的角色、信号延迟处理及存储位置等问题。

    目录

    1. Core Dump 标志
    2. Core vs Term
    3. 思考
    4. 总结

    更多推荐文章

    查看全部
    • Spring AI MCP Server 集成与源码解析
    • Trae AI 技能创建指南:自动保存提示词功能实现
    • 牛客 NC221681 dd 爱框框 滑动窗口解法
    • 双向循环链表原理与 C 语言实现
    • Pandas 数据清理实用技巧速查
    • Copilot 人工智能助手功能与版本介绍
    • PyArrow:Apache Arrow 的 Python 绑定与高效数据交换
    • Oracle 迁移 KingbaseES:SQL 语法快速兼容实战指南
    • SystemVerilog 系统级验证与硬件设计实战指南
    • 2026 年高校 AIGC 检测政策汇总
    • FPGA 原型验证基础:Simulation 与 Emulation 辨析
    • Python OpenCV 基础:摄像头调用与视频处理实战
    • XCKU15P-2FFVA1156E FPGA 核心参数与典型应用场景
    • 前端代码质量保证实践与工具链构建
    • 10 个优质 Python 学习网站推荐
    • Spring IoC 与依赖注入核心原理
    • 英伟达 GTC 2026:AI 智能体时代开启,Rubin 架构与新推理芯片发布
    • 电科金仓发布融合数据库 KES V9,探索 AI 时代新形态
    • C++ 红黑树详解:原理、插入与验证
    • 基于 OpenCode + OpenSpec 的 AI 编码规范驱动开发实践

    相关免费在线工具

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

    • JSON 压缩

      通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

    • JSON美化和格式化

      将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online