当前位置:首页 > 文章列表 > 文章 > linux > Linux核心转储分析教程:定位程序崩溃原因

Linux核心转储分析教程:定位程序崩溃原因

2026-03-24 08:12:51 0浏览 收藏
本文系统讲解了在Linux环境下如何定位程序崩溃原因,从确认core dump是否启用、识别其实际存储位置(尤其在systemd托管场景下需用coredumpctl而非盲目搜索文件),到使用gdb、addr2line、objdump等工具精准回溯崩溃点,涵盖符号调试、ASLR适配、动态库分析及日志线索挖掘等实战要点,直击生产环境中“找不到core”“看不到源码行”“地址对不上”等高频痛点,强调binary、core、debug info三者版本严格一致这一成败关键。

Linux怎么分析core dump_Linux如何定位程序崩溃原因【教程】

core dump 文件在哪,怎么确认它真被生成了

Linux 默认可能根本没开 core dump,所以第一步不是分析,而是确认你有东西可看。先检查 ulimit -c,输出是 0 就代表被禁用了;临时打开用 ulimit -c unlimited,但要注意这仅对当前 shell 及其子进程生效。

生成的 core 文件默认叫 core,通常落在程序执行时的工作目录(不是源码目录,也不是 /tmp),但实际路径受 /proc/sys/kernel/core_pattern 控制。常见坑是:程序在 systemd 下跑,systemd 会拦截 core dump 并转给 systemd-coredump,此时你得查 coredumpctl list,而不是满硬盘找 core 文件。

  • cat /proc/sys/kernel/core_pattern 看当前策略
  • 若输出类似 |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e,说明走 systemd 管理,别去文件系统里瞎翻
  • 手动测试是否能生成:运行 kill -SEGV $$(对自己 shell 发段错误),再看 ulimit -c 非零且当前目录有没有新 core

用 gdb 打开 core dump 看崩溃点最直接

有 core 文件 + 对应的原始可执行文件(必须是同一构建产物,带调试符号更好),就能定位到具体哪行代码崩的。gdb ./myapp core 进去后,bt(backtrace)是第一指令,它显示函数调用栈,最顶上那帧就是崩溃现场。

容易忽略的是符号问题:如果程序是 release 编译且 strip 过,bt 只能看到函数地址,看不到文件名和行号。这时候要么重编译加 -g,要么用 readelf -S ./myapp | grep debug 确认调试信息是否还在。

  • info registers 查看崩溃时各寄存器值,尤其 rip/pcrsp,能辅助判断是空指针还是栈溢出
  • frame 0 后跟 list,可显示崩溃行附近源码(需有调试信息)
  • 若 core 是 systemd 生成的,用 coredumpctl dump -o core myapp 先导出成传统 core 文件再用 gdb

没有源码或调试信息时,objdump + addr2line 能救急

生产环境常遇到只有 stripped 二进制和 core 的情况。这时靠 gdb 只能看到汇编,但至少能知道崩在哪个函数偏移处。先用 gdb ./myapp core,执行 bt,记下最上面那行的地址(比如 #0 0x0000555555556123 in ?? ())。

这个地址是虚拟内存地址,要映射回代码位置,得结合程序的加载基址。用 readelf -l ./myapp | grep LOAD 找第一个 LOAD 段的 Virtual Address(比如 0x555555554000),然后算偏移:0x0000555555556123 - 0x555555554000 = 0x2123。再用 addr2line -e ./myapp 0x2123 查源码行——前提是编译时没关 -g,否则只能靠 objdump -d ./myapp | grep -A10 -B10 '2123$' 看附近汇编逻辑。

  • gdbinfo proc mappings 可查实际加载地址,比 readelf 更准(尤其开了 ASLR 时)
  • addr2line 输出 ?? 表示没调试信息,不是命令用错了
  • 若程序是动态链接的,崩溃可能在 so 里,得用 info sharedlibrary 看 so 加载地址,再对齐偏移

systemd-coredump 日志里藏了不少线索

很多用户卡在“找不到 core 文件”,其实日志里早写了原因。运行 coredumpctl info myapp,输出里 Signal(如 SIGSEGV)、ExecutableStack trace(如果有符号)都直接可用。更关键的是 Coredump 字段,它告诉你这个 core 存哪(通常是 /var/lib/systemd/coredump/ 下带时间戳的压缩文件)。

systemd 默认把 core 压缩存档,所以不能直接 gdb,得先解压:zcat /var/lib/systemd/coredump/core.myapp.*.xz > core。另一个常被忽略的点是:coredumpctl list 显示的 PID 是崩溃时的进程 ID,但如果你重启过机器,旧 core 可能已被自动清理(看 /etc/systemd/coredump.confMaxUseKeepFree)。

  • 查历史崩溃:用 coredumpctl --since="2024-05-01" list 限定时间范围
  • 想永久保存所有 core,改 /etc/systemd/coredump.confStorage=external 并确保 /var/lib/systemd/coredump 有足够空间
  • coredumpctl debug myapp 会直接启动 gdb 并加载对应 core 和二进制,省一步手动操作

事情说清了就结束。真正难的不是看懂 bt,而是确认你手上的 binary、core、debug info 三者版本完全匹配——差一个 commit,地址就对不上。

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

方法参数校验与IllegalArgumentException详解方法参数校验与IllegalArgumentException详解
上一篇
方法参数校验与IllegalArgumentException详解
jQuery引入方法详解【教程】
下一篇
jQuery引入方法详解【教程】
查看更多
最新文章
资料下载
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    4202次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    4558次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    4441次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    6090次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    4803次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码