Я написал необработанный модуль ошибок для своего iPhone-приложения, но по некоторым причинам некоторые ошибки обходят его.Как уловить ВСЕ ошибки прерывания программы на 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];
Он избегает моего обработчика ошибок полностью, и вместо этого выводит на консоль:
Stack свалка: 0. Running прохода «Combine излишних инструкций» на функцию «@ glgRunProcessor10» **
У меня был еще один, что напечатанным следующее (но я не могу вспомнить, что код, который я пытался вызвать его):
Stack свалка: 0. Running проход 'Linear Scan Регистрация Allocator' на функцию '@ gldLLVMFPTransform5'
Если я это сделать:
NSString* str = [NSString stringWithFormat:@"a"];
[str release];
[str init];
Это ничего не печатает, а просто выходит из программы.
Кто-нибудь знает верный способ обеспечить, чтобы ВСЕ ошибки попадали и выполнялись через ручную процедуру?