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

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/pc和rsp,能辅助判断是空指针还是栈溢出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$' 看附近汇编逻辑。
gdb里info proc mappings可查实际加载地址,比 readelf 更准(尤其开了 ASLR 时)addr2line输出??表示没调试信息,不是命令用错了- 若程序是动态链接的,崩溃可能在 so 里,得用
info sharedlibrary看 so 加载地址,再对齐偏移
systemd-coredump 日志里藏了不少线索
很多用户卡在“找不到 core 文件”,其实日志里早写了原因。运行 coredumpctl info myapp,输出里 Signal(如 SIGSEGV)、Executable、Stack 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.conf 的 MaxUse 和 KeepFree)。
- 查历史崩溃:用
coredumpctl --since="2024-05-01" list限定时间范围 - 想永久保存所有 core,改
/etc/systemd/coredump.conf中Storage=external并确保/var/lib/systemd/coredump有足够空间 coredumpctl debug myapp会直接启动 gdb 并加载对应 core 和二进制,省一步手动操作
事情说清了就结束。真正难的不是看懂 bt,而是确认你手上的 binary、core、debug info 三者版本完全匹配——差一个 commit,地址就对不上。
今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
方法参数校验与IllegalArgumentException详解
- 上一篇
- 方法参数校验与IllegalArgumentException详解
- 下一篇
- jQuery引入方法详解【教程】
-
- 文章 · linux | 43分钟前 |
- Linux查看内网IP及地址分配方法
- 201浏览 收藏
-
- 文章 · linux | 9小时前 |
- Linux设置静态IP教程:修改网卡和网关配置
- 149浏览 收藏
-
- 文章 · linux | 10小时前 |
- Linux截图技巧与工具推荐
- 325浏览 收藏
-
- 文章 · linux | 13小时前 |
- LinuxVIM教程与常用命令大全
- 288浏览 收藏
-
- 文章 · linux | 14小时前 |
- Linux下CMake安装与编译环境配置教程
- 399浏览 收藏
-
- 文章 · linux | 15小时前 |
- Linuxvsftpd虚拟用户权限配置详解
- 370浏览 收藏
-
- 文章 · linux | 15小时前 |
- Linux别名设置方法及实用技巧
- 220浏览 收藏
-
- 文章 · linux | 15小时前 |
- Linux下快速查找文件路径的find命令教程
- 481浏览 收藏
-
- 文章 · linux | 18小时前 |
- Linux中grep命令怎么用?常用选项有哪些?
- 244浏览 收藏
-
- 文章 · linux | 19小时前 |
- Linux进程卡死如何强制结束
- 229浏览 收藏
-
- 文章 · linux | 19小时前 |
- Linux修改主机名步骤详解
- 251浏览 收藏
-
- 文章 · linux | 20小时前 |
- Linux文件移动命令使用教程
- 179浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 4202次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 4558次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 4441次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 6090次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 4803次使用
-
- 命令行工具:应对Linux服务器安全挑战的利器
- 2023-10-04 501浏览
-
- 如何使用Docker进行容器的水平伸缩和负载均衡
- 2023-11-07 501浏览
-
- linux .profile的作用是什么
- 2024-04-07 501浏览
-
- 如何解决s权限位引发postfix及crontab异常
- 2024-11-21 501浏览
-
- 如何通过脚本自动化Linux上的K8S安装
- 2025-02-17 501浏览

