什么是 Core Dump?如何配置与分析?

Core dump 是 Linux 系统在进程异常崩溃时生成的转储文件,用于调试程序错误。本题详细讲解了 Core dump 的配置方法和分析工具。

部署与运维 中等 Linux 系统运维 调试

Core dump 是 Linux 系统在进程异常崩溃时生成的转储文件,用于记录崩溃时的内存状态、堆栈内容和全局变量信息,帮助开发者调试程序错误。其含义源于操作系统通过核心转储捕获关键崩溃信息,从而支持事后分析。以下是配置与分析方法的逐步说明:

一、配置 Core Dump

生成 coredump 需要设置资源限制并定义存储路径,以确保系统能创建和处理文件。操作步骤如下:

  1. 设置资源限制以允许生成文件
    通过 ulimit 命令解除限制。默认为关闭(显示为 0),输入无限制可激活:

    ulimit -c unlimited  # 临时开启 coredump 允许创建无限大小文件
    

    永久化设置:若需全局有效,编辑 /etc/security/limits.conf 并添加内容:

    * soft core unlimited
    * hard core unlimited  # 适用于所有用户永久化
    
  2. 配置核心文件存储位置及格式
    核心转储位置由系统文件指定,包括文件名模板:

    • 修改 /proc/sys/kernel/core_pattern 文件控制路径:

      # 示例路径设置于指定文件夹内创建文件
      mkdir /corefile  # 创建存储文件夹
      # 修改 core_pattern 指定输出位置如自定义格式 %e(可执行文件名)%p(进程ID) 
      echo "/corefile/core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern  # 临时设置
      
    • 系统默认处理策略:大多数新 Linux 系统使用 systemd-coredump,默认存储在 /var/lib/systemd/coredump/
    • 永久化文件位置配置:修改系统配置文件达到永久化:

      # 编辑内核配置文件 /etc/sysctl.conf
      echo "kernel.core_pattern=/corefile/core.%e.%p" | sudo tee -a /etc/sysctl.conf  # 添加新行
      sysctl -p  # 应用更改后持久化设置
      

      参数如 %p 进程PID 和 %e 程序名在格式化中灵活配置路径和文件名.

二、分析 Core Dump

生成后文件可借助调试工具分析关键崩溃点:

  1. 基础调试方式:使用 gdb 加载崩溃可执行程序并核心文件:

    gdb <可执行程序路径> <核心转储文件路径>  # 例:gdb ./test-app /corefile/core.test-app.1234
    

    在 gdb 接口中输入 bt(backtrace)指令观察堆栈调用链条追踪错误位置。

  2. 进阶调试工具应用:检查变量值或复制场景步骤:

    • 输入 bt full 可显示详细栈帧和变量状态
    • frame N 跳转至特定帧后使用 info locals 提取局部数据识别错误原因(如空指针引用).