我需要为由 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 .
最佳答案
我刚刚在 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
的同一终端 session 中执行 cc x.c
(假设您已安装 Xcode 的命令行工具),然后是 ./a.out
无论您相信与否,核心转储的大小超过 700Mb。
关于coredump - 在 macOS Sierra 中为崩溃的进程启用核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39852691/