Включить дампы ядра для аварийного процесса в macOS Sierra

Мне нужно включить создание Core Dump File для процессов, которые завершаются SIGABRT,SIGBUS и т.д..

В предыдущих версиях MAC OS X (включая ElCapitan), чтобы включить файл Code Dumps для всех процессов, я сделаю:

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

Сейчас этот способ не работает. На этом сайте рассказывается о новой команде gcore, но это работает для запущенных процессов. Для KernelCoreDumps теперь необходимо включить переменную NVRAM официальная.


person aax    schedule 04.10.2016    source источник


Ответы (1)


Я только что попробовал ulimit -c unlimited с Xcode 9, а затем выполнил что-то обязательное, чтобы получить segfault, и, бинго, получил дамп ядра, написанный на /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

Верите или нет, размер дампа превышал 700 МБ.

person Dima Pasechnik    schedule 22.11.2017