Linux C程序Core Dump了怎么办?core dump文件怎么分析

在 Linux C 编程中,core 通常指的是 Core Dump(核心转储文件)。

当程序发生严重错误(如段错误 Segmentation Fault、非法指令、除零错误等)而崩溃时,Linux 内核会将该进程当时的内存状态、寄存器信息、堆栈跟踪等数据保存到磁盘上的一个文件中,这个文件就是 Core Dump 文件。

Linux GDB core dump分析
加载中
Linux GDB core dump分析

Core Dump 的作用

  1. 调试崩溃程序:通过 gdb 等工具分析 core 文件,定位崩溃原因。
  2. 记录运行时状态:包括变量值、调用栈、内存布局等。
  3. 生产环境排查问题:尤其在无法复现的偶发 bug 中非常有用。

如何生成 Core Dump

检查当前是否允许生成 Core Dump

ulimit -c
  • 如果输出为 0,表示禁止生成 core 文件。
  • 如果输出为非零数字(如 1024),表示允许生成,且限制大小为 1024 KB。

启用 Core Dump

ulimit -c unlimited   # 允许生成无大小限制的 core 文件

Linux C程序Core Dump了怎么办?core dump文件怎么分析

注意:ulimit 设置只对当前 shell 及其子进程有效,如需永久生效,可写入 /etc/security/limits.conf 或 /etc/profile。

指定 Core 文件生成路径和名称

通过 /proc/sys/kernel/core_pattern 控制:

cat /proc/sys/kernel/core_pattern
# 默认可能是: core
# 可修改为: /tmp/core.%e.%p   (%e 是程序名,%p 是 PID)

修改方法:

echo "/tmp/core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern

常用占位符:

  • %e:可执行文件名
  • %p:进程 PID
  • %t:时间戳
  • %u:用户 ID
  • %g:组 ID

触发 Core Dump 的常见信号

以下信号会导致程序崩溃并生成 core dump(如果未捕获):

信号 含义
SIGSEGV 段错误(访问非法内存)
SIGABRT 主动 abort(如

Linux C程序Core Dump了怎么办?core dump文件怎么分析

assert() 失败)

SIGFPE浮点异常(如除零)
SIGILL非法指令
SIGBUS总线错误(如访问未对齐内存)

使用 GDB 分析 Core 文件

假设你有一个可执行文件 myapp 和一个 core 文件 core.myapp.12345:

gdb ./myapp core.myapp.12345

进入 GDB 后常用命令:

(gdb) bt          # 查看调用栈
(gdb) frame 3     # 切换到第3层栈帧
(gdb) print var   # 打印变量值
(gdb) list        # 查看源码
(gdb) info registers # 查看寄存器状态

C 程序中手动触发 Core Dump

你可以用 abort() 或 raise(SIGSEGV) 手动触发:

#include <stdlib.h>
#include <signal.h>
int main() {
    abort();  // 发送 SIGABRT,生成 core dump
    // 或 raise(SIGSEGV);
    return 0;
}

注意事项

  1. 权限问题:确保程序有权限写入 core 文件目录。
  2. Linux C程序Core Dump了怎么办?core dump文件怎么分析

  3. 磁盘空间:确保目标分区有足够空间。
  4. ASLR(地址空间布局随机化):可能影响 core 文件分析,调试时可临时关闭:
    echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
  5. 压缩 Core 文件:可通过 core_pattern 指定压缩工具,如:
    echo "|/usr/bin/gzip -c > /tmp/core.%e.%p.gz" | sudo tee /proc/sys/kernel/core_pattern

示例:完整调试流程

编写一个会段错误的程序:

// crash.c
#include <stdio.h>
int main() {
    int p = NULL;
    p = 42;  // 段错误
    return 0;
}

编译:

gcc -g -o crash crash.c

启用 core dump:

ulimit -c unlimited
  1. 运行程序,触发崩溃,生成 core 文件。

  2. 用 GDB 分析:

gdb ./core.crash.<PID>

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/477527.html

赞 (0)
Farpoint是什么?farpoint控件用法详解
上一篇 2026年7月10日 01:54
libtiff python怎么用?libtiff python读取tif文件报错
下一篇 2026年7月10日 01:57

相关推荐

  • Linux分区id怎么查看,Linux如何修改分区UUID?

    Linux 分区 ID 详解在 Linux 系统中,分区 ID(Partition ID) 或 分区类型码(Partition Type Code) 用于告知操作系统和引导加载程序(Bootloader)该分区上存储的是什么类型的数据(是 Linux 文件系统、交换分区还是 Windows NTFS 分区),根……

    2026年7月13日
    1600
  • 512G内存服务器价格多少,哪个品牌性价比高

    一台配置512GB内存的服务器,根据处理器、硬盘、网络等配置差异,全新采购价格通常在5万到20万元区间,若选择租用则月费从数千元到两万元不等,具体取决于服务商资质和机房等级,512GB内存到底用在哪些场景普通办公服务器用不到这个量级,512GB内存主要面向两类用户:一是内存数据库场景,比如SAP HANA、Re……

    2026年8月11日
    1500
  • 万网1T服务器空间多少钱一年?,价格是多少?

    万网1T服务器空间一年的费用并非固定值,根据实例规格、磁盘类型及带宽配置不同,年付成本通常在几千元至数万元区间,具体需以阿里云官网实时报价为准,影响万网1T服务器空间价格的关键因素万网(现阿里云)的1T服务器空间通常指云服务器ECS挂载1TB数据盘,或独立服务器搭配1T存储,定价并非单一标价,而是由多个维度叠加……

    2026年7月28日
    500
  • Linux死进程怎么强制关闭,如何查看并杀死卡死的进程?

    Linux 死进程详解与处理指南在 Linux 系统中,用户提到的“死进程”通常指两种完全不同的状态:僵尸进程 (Zombie Process) 和 不可中断睡眠进程 (Uninterruptible Sleep Process),处理这两者的逻辑截然不同,僵尸进程 (Zombie Process)僵尸进程是指……

    2026年7月14日
    1500
  • 网心云x86服务器一天能赚多少钱?,收益高吗?

    一台网心云x86服务器的日收入通常在5元至30元之间,具体取决于网络环境、硬件配置和调度策略,不存在固定值,影响日收入的核心因素硬件配置与收益的对应关系网心云x86服务器的收益并非单纯依赖CPU性能,上行带宽才是第一权重,一台配置为E3-1230、16GB内存、240GB SSD配合1TB HDD的服务器,在5……

    2026年8月2日
    600
  • 16G内存服务器能设置多少虚拟机?,虚拟机数量怎么计算?

    16GB内存服务器能稳定运行的虚拟机数量通常在5到15台之间,具体数量取决于虚拟机操作系统、应用类型及内存分配策略,轻量级Linux实例可分配512MB-1GB,而Windows Server实例则需2GB起步,决定虚拟机数量的核心因素内存分配策略与超配比率虚拟化平台允许超配内存,即分配的虚拟机内存总和超过物理……

    2026年8月20日
    1000
  • 买一台服务器到底要多少钱,服务器多少钱一台?

    买一台服务器多少钱?答案是:从每月几十元的云服务器到数十万元的高性能物理机都有,价格跨度极大,关键看你的用途和配置,对于个人博客或小型企业官网,一年预算在几百到几千元即可搞定;对于电商大促、视频渲染或高并发业务,则需要投入数万元甚至更多,这篇文章直接拆解不同场景下的真实价格、配置清单和选购逻辑,帮你把钱花在刀刃……

    2026年8月17日
    1400
  • 简米云服务器1g空间价格多少,值得买吗?

    阿里云并没有“1G空间”这类按存储容量出售的产品,日常用户搜索的“1G”实际指的是1核CPU+1GB内存的入门云服务器,这类配置包年活动价普遍在百元上下,按量付费折算月成本约二十元,长期使用选包年更划算,搜“1G空间”,打开的页面为什么都是一核一G云主机带着老式虚拟主机的思维看云服务器,很容易被绕晕,早期便宜空……

    2026年8月21日
    1300
  • 戴尔服务器32G内存价格多少,为什么这么贵?

    戴尔服务器32G内存的价格通常在600元至3500元之间,具体取决于内存代际(DDR3/DDR4/DDR5)、类型(RDIMM/LRDIMM)以及频率,采购整机时搭配内存往往比单独购买更划算,戴尔服务器32G内存定价逻辑:先看代际再看类型戴尔服务器内存并非标准消费级产品,它的价格体系由三个核心变量决定,搞清楚这……

    2026年8月27日
    600
  • MC服务器一个月需要多少流量?,怎么选?

    开篇答案一个中小型Minecraft服务器(同时在线10-30人),月流量消耗通常在500GB到2TB之间, 如果服务器面向几十人开放,且包含大量插件、资源包,或者玩家经常探索新区块,流量会直接冲高到3TB以上,流量不是固定值,它完全取决于你的玩家在做什么,影响MC服务器流量消耗的关键因素玩家数量与在线时长服务……

    2026年8月6日
    900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注