在 macOS Sierra 中为崩溃的进程启用核心转储
Posted
技术标签:
【中文标题】在 macOS Sierra 中为崩溃的进程启用核心转储【英文标题】:Enable Core Dumps for crashed process in macOS Sierra 【发布时间】:2017-02-12 15:25:32 【问题描述】:我需要为被 SIGABRT、SIGBUS 等终止的进程启用核心转储文件创建。
在以前版本的 MAC OS X(包括 ElCapitan)中,为我将要执行的所有进程启用代码转储文件:
sudo sysctl -w kern.corefile=/Users/tester/core.%U.%P.%N.dump
sudo sysctl -w kern.coredump=1
sudo launchctl limit core unlimited
sudo ulimit -c unlimited
launchctl limit core unlimited
ulimit -c unlimited
现在这种方式行不通了。 在this Site 中谈论新的 gcore 命令,但它适用于正在运行的进程。 对于 KernelCoreDumps,您现在必须启用 NVRAM 变量 official。
【问题讨论】:
【参考方案1】:我刚刚在 Xcode 9 中尝试了ulimit -c unlimited
,然后执行了一些肯定会导致段错误的操作,并且宾果游戏得到了一个用/core/
编写的核心转储。
也就是说,我试过了
#include <stdio.h>
int main()
int a[2];
printf("\n hi\n");
a[20000]=10;
return 0;
将其保存到一个文件中,比如x.c
,然后在您执行上述ulimit
的同一终端会话中执行cc x.c
(假设您安装了Xcode 的命令行工具),然后是./a.out
coredump 的大小超过 700Mb,信不信由你。
【讨论】:
以上是关于在 macOS Sierra 中为崩溃的进程启用核心转储的主要内容,如果未能解决你的问题,请参考以下文章