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/linux-c%e7%a8%8b%e5%ba%8fcore-dump%e4%ba%86%e6%80%8e%e4%b9%88%e5%8a%9e%ef%bc%9fcore-dump%e6%96%87%e4%bb%b6%e6%80%8e%e4%b9%88%e5%88%86%e6%9e%90/

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

相关推荐

  • 方丹开一个服务器要多少钱,方丹服务器租用价格贵不贵

    方丹项目部署一台服务器,按2026年主流IDC市场行情,基础云服务器月付通常在几十元到几百元,独立物理服务器月付多在数百元到数千元,实际价格由算力、带宽、线路和机房级别决定,方丹服务器价格先看四个核心变量方丹业务可能是本地生活小程序、内容社区、数据采集或游戏社区,不同场景对服务器的要求完全不同,报价单上同一个数……

    2026年9月14日
    200
  • 方舟服务器一个要多少钱,租用价格怎么算?

    方舟服务器租用价格通常在每月100元到800元之间,核心取决于玩家数量、模组数量和带宽需求,一台能稳定承载30到50人的方舟服务器,月租成本普遍集中在200元到400元区间,接下来我从配置、场景和品牌三个维度帮你拆解这笔账,影响方舟服务器价格的核心配置参数方舟生存进化是一款对硬件资源极其敏感的沙盒游戏,和非对称……

    2026年10月3日
    000
  • linux chgrp命令怎么用?chgrp修改文件所属组

    Linux中的chgrp命令用于修改文件或目录所属的用户组,其核心逻辑是将指定文件的组所有权转移给目标用户组,语法为chgrp [选项] 组名 文件,在Linux的多用户环境中,权限管理是安全基石,而用户组(Group)则是实现批量权限控制的关键角色,很多时候,我们不需要为每个用户单独设置权限,而是通过调整文件……

    2026年7月6日
    9400
  • 服务器HTTP的端口号是多少,默认端口是什么?

    服务器HTTP的默认端口号是80,HTTPS则是443,这是互联网协议栈中的基础共识,也是绝大多数Web服务运行的标准配置,下面从端口原理、验证方法和实际场景入手,把这组数字讲透,HTTP端口在协议层面的定位端口是操作系统内核为网络服务分配的“门牌号”,范围从0到65535,HTTP协议在设计之初,就把80端口……

    2026年9月21日
    100
  • 幻塔服务器数量是多少,哪个区服最活跃?

    幻塔服务器数量没有固定总数幻塔并没有对外公布一个固定的服务器总数,玩家在登录界面看到的区服列表才是当前可玩入口;官服、渠道服、国际服分开计算,数量会随开服、合服、版本与渠道调整而变化, 2026年再问“幻塔一共有多少服务器”,更准确的问法是“当前登录界面显示多少个区服、这些区服属于哪个渠道、有没有合服公告”,把……

    相关资讯 2026年10月21日
    000
  • 云服务器每年费用到底怎么算,包年价格一般多少钱

    云服务器每年的花费通常在几百元到数万元之间,入门级配置仅需300-1000元/年,而高性能企业级配置则需1万-5万/年,具体取决于CPU、内存、带宽及机房等级,2025年主流云厂商的价格体系已经相当透明,但真正让用户困惑的往往是:同样的“2核4G”,为什么有的平台卖500元,有的却要卖2000元?这背后其实隐藏……

    相关资讯 2026年11月4日
    000
  • 100tb存储下载服务器多少钱,价格贵不贵?

    100TB存储下载服务器的市场月租价格通常在1000元至3000元之间,年付折合约8000元至25000元,具体取决于硬盘类型、带宽大小和机房等级,这个价格区间覆盖了从入门级二手盘方案到企业级全新盘方案的跨度,下面拆解每一分钱花在哪里,价格背后的三道分水岭新盘与二手盘的价差接近一倍100TB存储容量在服务器领域……

    2026年8月29日
    500
  • linux fsockopen被禁用怎么办,如何开启

    linux fsockopen 是 PHP 中实现网络通信的基础函数,掌握其配置与使用是优化 Linux 环境下 Web 应用的关键, 这个函数允许你直接从 PHP 脚本打开一个网络套接字连接,常用于发送邮件、调用 API 或抓取网页,在 Linux 服务器上,它的可用性取决于 php.ini 配置和系统防火墙……

    2026年7月19日
    1100
  • 普坝阵列服务器价格是多少?,哪个品牌性价比高?

    普坝阵列服务器的主流采购价格区间在3.8万元到15万元之间(单台,含3年原厂质保),具体落地价由硬盘容量、读写缓存、网络接口和冗余电源四个核心配置决定,而非品牌溢价,如果你只是做冷数据备份,6万元以内就能拿下入门款;如果跑在线数据库或视频渲染集群,预算大概率要摸到12万元以上,普坝阵列服务器为什么价格差距这么大……

    2026年10月12日
    100
  • 视频服务器带宽10M能带多少人,视频服务器带宽怎么计算

    视频服务器带宽10M能带多少人?核心答案:以720P主流视频码率计算,10Mbps带宽约支持50-100人同时在线观看,若视频为1080P,则人数降至20-40人, 这个数字受视频码率、并发率、是否启用CDN等因素影响,下面拆开细说,带宽与码率的基础认知要算清10M能带多少人,先得搞懂两个概念:带宽和码率,带宽……

    2026年8月19日
    1900

发表回复

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