Как упоминает Карл, перехват событий сбоя на iOS (и macOS) чреват опасностью по разным причинам. Некоторое время я был сопровождающим Crashlytics SDK, и я бы настоятельно рекомендовал не делать этого.
Но, это определенно возможно.
Одна вещь, которая, кажется, волнует людей, - это связь между сигналами, исключениями (ObjC или C ++) и мах исключениями. Это все очень разные вещи.
В iOS (и в tvOS, macOS) события, завершающие процесс, Mach исключения . Это события низкого уровня, которые вы можете перехватить. Когда вы видите этот префикс EXC_
, вы знаете, что смотрите на исключение маха. Я считаю, что все они определены в mach/exception.h
.
Теперь в iOS есть интересная реализация, где, если нет обработчиков исключений маха, ОС преобразует событие в сигнал Unix. Функция signal
может использоваться для их перехвата. Поскольку EXC_BAD_ACCESS
не является unix-сигналом, он не является допустимым аргументом для функции signal
. Но вы можете добавить обработчики к перечисленным сигналам, и они будут давать вам примерно ту же информацию.
Исключения Маха являются значительно более мощным и безопасным механизмом для перехвата таких событий. К сожалению, они также требуют значительно более сложной системы обработки. Сигналы имеют всевозможные проблемы, но их намного проще использовать.
Мне было бы интересно узнать, что вы пытаетесь сделать, на случай, если, возможно, найдется лучший способ добиться того, чего вы хотите.
Опять же, я бы не стал идти по этому пути. Это просто не стоит вашего времени. Сложно заставить все работать, и когда вы это сделаете, у вас возникнет ложное чувство безопасности. Вы можете даже подумать, что все работает правильно, потому что, когда ваш код работает совсем не так, вы никогда не узнаете об этом, и время от времени вы будете получать странные отчеты от пользователей о случайных зависаниях.