В Mac OS X, если я отправлю SIGQUIT в мою программу на C, он завершается, но нет файла дампа ядра.
Вам нужно вручную включить дампы ядра в Mac OS X (как?), или они записываются в другое место вместо рабочего каталога?
В Mac OS X, если я отправлю SIGQUIT в мою программу на C, он завершается, но нет файла дампа ядра.
Вам нужно вручную включить дампы ядра в Mac OS X (как?), или они записываются в другое место вместо рабочего каталога?
Кажется, они подавлены по умолчанию. Запуск
$ ulimit -c unlimited
Включит дамп ядра для текущего терминала, и он будет помещен в /cores
как core.PID
. Когда вы открываете новый сеанс, для него снова будет установлено значение по умолчанию.
В macOS ваши аварийные дампы автоматически обрабатываются Crash Reporter.
Вы можете найти файлы обратной трассировки, выполнив Консоль и перейдя в раздел "Отчеты о диагностике пользователя" (в разделе "Информация о диагностике и использовании"), или вы можете найти их в ~/Library/Logs/DiagnosticReports
.
Вы также можете проверить, где создаются дампы, отслеживая файл system.log
, например,
tail -f /var/log/system.log | grep crash
Фактические файлы дампа ядра вы можете найти в /cores
.
Смотрите также:
Ответ выше,
ulimit -c неограниченный
работает, но обязательно запустите его в том же терминале, с которого вы запустите программу, которая сбрасывает ядро. Сначала нужно выполнить команду ulimit.
по умолчанию скрытые специфические каталоги в mac osx. вы можете включить эту функцию в терминале, а затем дамп ядра должен быть видимым в каталоге/ядрах.
defaults написать com.apple.finder AppleShowAllFiles TRUE
Кроме того, каталог /corees должен существовать, и пользователь, запускающий программу, должен иметь права на запись.