minidump vs core dump,主要涉及 Linux/Unix(core dump)与 Windows(minidump)的调试机制,也适用于在 SLES 或其他 Linux 系统上进行 crash 分析时的理解。
1. Core Dump(核心转储)
-
概念
Core dump 是进程在崩溃时,内核将进程的整个用户空间内存镜像、寄存器状态等信息转储到文件(通常是
core
文件),便于开发者用调试器(如gdb
)分析当时的执行状态。 -
特点
-
体积大:通常和进程占用的虚拟内存空间大小接近,可能达到 GB 级。
-
信息完整:包含所有用户态内存、寄存器、线程栈、信号处理等。
-
调试能力强:适合定位复杂 bug(内存越界、野指针、死锁等)。
-
生成方式:
- Linux 中由
ulimit -c unlimited
和内核core_pattern
控制。 - 存放在
/var/lib/systemd/coredump
或当前工作目录。
- Linux 中由
-
-
缺点
- 存储成本高。
- 传输/收集困难(大文件)。
2. Minidump(小型转储)
-
概念
Minidump 最早由 Windows 引入(如 Windows Error Reporting)。它只保存进程崩溃时的关键信息,如寄存器、线程调用栈、模块列表,而不保存全部内存。
-
特点
-
体积小:通常只有几 MB。
-
信息有限:仅包含调试所需的最小集合(栈、寄存器、加载模块符号等)。
-
调试能力有限:足够用于快速定位大部分崩溃问题,但无法做全面内存分析。
-
生成方式:
- Windows:通过
MiniDumpWriteDump
API 生成.dmp
文件。 - Linux:部分应用(如 Chromium、Breakpad、systemd-coredump)会实现类似的 "minidump" 格式。
- Windows:通过
-
-
优点
- 文件小,便于上报和集中分析。
- 适合大规模分发环境(如浏览器、服务器集群)。
-
缺点
- 无法做复杂内存内容分析。
- 必须依赖符号文件(.pdb / debug info)来还原调用栈。
3. 对比总结
特性 | Core Dump | Minidump |
---|---|---|
文件大小 | 大(接近进程内存大小,几百 MB~GB) | 小(通常几 MB) |
内容完整性 | 完整内存 + 寄存器 + 栈 + 线程信息 | 寄存器 + 栈 + 模块符号,部分内存 |
调试能力 | 能重现几乎全部现场 | 只能重现调用栈,部分上下文 |
生成速度 | 慢 | 快 |
适用场景 | 深度调试、复杂内存问题 | 大规模崩溃收集、快速定位问题 |
4. 在 SLES/Linux 环境中的应用
-
Core Dump
-
配置
ulimit -c unlimited
-
配置
/proc/sys/kernel/core_pattern
位置,例如:bashecho "/var/coredumps/core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern
-
使用
gdb ./binary core.xxxx
调试。
-
-
Minidump-like
- systemd 提供
coredumpctl
,可提取简化版的 dump。 - Google 的 Breakpad 、微软的 Crashpad(跨平台)可在 Linux 生成兼容的 minidump。
- 适合大规模服务(浏览器、云平台)自动上报崩溃信息。
- systemd 提供
👉 简单说:
- Core dump = 大而全(深度分析用)。
- Minidump = 小而快(大规模收集与快速定位用)。