Core Dump与Crash Report是否相同?MacOS生成核心转储疑问
MacOS下生成Core Dump的正确操作
你之前没生成成功是因为MacOS默认关闭了core dump的生成,得先开启:
- 临时生效(重启终端后失效):
运行命令:ulimit -c unlimited,它把core文件的大小限制改为无上限,默认值是0,所以根本不会生成core dump。 - 永久生效:
打开你使用的shell配置文件,比如~/.zshrc(若用zsh)或~/.bash_profile(若用bash),添加一行ulimit -c unlimited,保存后要么重启终端,要么运行source ~/.zshrc让配置立即生效。
之后重新执行你的测试命令:
sleep 100 & killall -SIGSEGV sleep
此时当前目录会生成core.<进程ID>格式的core dump文件,比如core.4567。
Crash Report与Core Dump的区别
二者并不完全相同,核心差异如下:
- 内容与格式:
- Core dump是进程崩溃瞬间的完整内存镜像,二进制格式,包含进程当时的所有内存数据、寄存器状态、栈帧信息,必须用
lldb、gdb这类调试工具加载才能分析。 - Crash report是系统生成的结构化文本报告,除了崩溃信号、进程ID等基础信息,还会给出符号化后的调用栈(直接能看到崩溃发生在哪个函数、哪个库),同时包含系统环境、加载的第三方库信息,无需工具就能直接阅读。
- Core dump是进程崩溃瞬间的完整内存镜像,二进制格式,包含进程当时的所有内存数据、寄存器状态、栈帧信息,必须用
- 生成条件:
- Core dump必须手动开启
ulimit -c限制,且只有进程收到允许生成core的信号(如SIGSEGV、SIGABRT)时才会产生,默认关闭。 - Crash report由MacOS的
CrashReporter服务自动生成,不管core dump是否开启,只要进程崩溃就会生成,默认开启,存储在~/Library/Logs/DiagnosticReports/目录下,也可通过Console.app查看。
- Core dump必须手动开启
- 使用场景:
- Core dump适合深度调试,比如要排查崩溃时某个变量的具体值、内存中的异常数据,还原完整崩溃现场,是开发人员解决复杂问题的工具。
- Crash report适合快速定位问题,无需调试工具,通过调用栈就能大致判断崩溃位置,不管是开发人员快速排查,还是普通用户提交问题反馈都适用。
内容的提问来源于stack exchange,提问作者tadm123
相关产品推荐
相关产品推荐

