Я написал необработанный модуль ошибок для своего приложения для iPhone, но по некоторым причинам некоторым ошибкам удается его обойти.
У меня есть обработчик исключений и установлены следующие обработчики сигналов:
NSSetUncaughtExceptionHandler(&handleException);
signal(SIGILL, handleSignal);
signal(SIGABRT, handleSignal);
signal(SIGFPE, handleSignal);
signal(SIGBUS, handleSignal);
signal(SIGSEGV, handleSignal);
signal(SIGSYS, handleSignal);
signal(SIGPIPE, handleSignal);
Для большинства вещей (нераспознанный селектор, ошибки с плавающей запятой и т. Д.) Это работает, но, например, когда я запускаю следующий код:
NSString* str = [NSString stringWithFormat:@"a"];
[str release];
[str retain];
Он полностью избегает моего обработчика ошибок и вместо этого печатает этона консоль:
Дамп стека: 0. Выполнение прохода «Объединить избыточные инструкции» для функции «@ glgRunProcessor10» **
У меня был другой, который напечатал следующее(но я не могу вспомнить, какой код я использовал, чтобы вызвать его):
Дамп стека: 0. Выполнение прохода 'Распределитель регистра линейного сканирования' для функции '@ gldLLVMFPTransform5'
Если я сделаю это:
NSString* str = [NSString stringWithFormat:@"a"];
[str release];
[str init];
Он вообще ничего не печатает, а просто выходит из программы.
Кто-нибудь знает надежный способ гарантировать, что ВСЕ ошибкипопасться и пробежатьпроцедура обработчика?