Почему этот код разбивается на распределенное приложение, но работает в отладчике?

У меня есть простой код, который выполняется, и в случае сбоя я хочу поймать исключение, чтобы приложение не разбилось.

@try { x = [self try_doMyWork:Param]; } @catch (NSException* e) { NSLog(@"Exception"); } 

Хотя этот код работает в отладке и улавливает исключение (которое является простым индексом за пределами массива), он падает в распределенных приложениях на iPhone.

Почему это и как я могу гарантировать, что он также работает с распределенными приложениями?

Неиспользованные исключения на уровне приложений являются лишь одной из причин сбоев. Сигналы BSD, такие как EXC_BAD_ACCESS, также могут вызывать сбои – и улавливание NSExceptions не предотвратит их.

Невозможно сказать, какова конкретная авария, не зная деталей try_doMyWork :, но я думаю, что наиболее распространенной причиной сбоев на С-слое (а не словом Objective-C) являются проблемы управления памятью – попытка написать или прочитать что-то ваше приложение не должно получить доступ. Наиболее вероятным объяснением является то, что исключение, которое вы видите при отладке, не совпадает с ошибкой, которую вы видите в дистрибутиве.

В режиме отладки диспетчер кучи может выделять объекты с буферными зонами до и после них (называемые охранниками) и заполнять эти защитные устройства известными значениями (например, 0x7F). Он делает это так, чтобы он мог протестировать эти защитники, когда вы освобождаете память, и может сказать, написано ли вы за пределами выделенной памяти (или до ее начала). Таким образом, он может сообщить вам, что ваш код имеет ошибку (блок памяти).

В режиме выпуска он не создает эти защитные устройства, и поэтому, когда вы пишете вне выделенной памяти, происходят плохие вещи (например, сбои).

  • Objective-c Try / Catch not catching
  • Как заменить NSUncaughtExceptionHandler на определение в навигаторе точки останова?
  • Создание NSException из IntPtr
  • Разница между try catch и NSSetUncaughtExceptionHandler
  • Обработка исключений во всем приложении
  • Необработанный номер линии NSException?
  • Как получить номер строки, имя метода и имя класса при сбое при использовании Objective C
  • Исключение NSInvalidArgument - случайные объекты Получение didEnterBackground
  • Понимание NSBlockOperation
  • бросать обычное исключение в объекте c
  • Interesting Posts

    Сбой приложения во время анимации ключевого кадра: – непризнанный селектор

    Как добавить диспетчеры просмотра в контроллер навигации?

    Ошибка локализации приложения в ios

    Есть ли какой-либо API, чтобы получить глобальное текущее время

    После обновления моего членства в iOS необходимо обновить мои приложения новыми профилями распространения, подписанными с новым сертификатом распространения?

    Реализуйте эластичную веревку в SpriteKit

    пользовательский шрифт не отображается на каком-либо симуляторе

    Разделение делегатов из ViewController на собственные классы

    Как загрузить изображения с помощью HTML-файла в UIWebView

    Кнопка в UIPageViewController

    фиксированная позиция сломана на contentEditable Safari ios webkit

    Ионные переходы получают белую страницу только в ios

    Таблица повторного использования Просмотр переменных Swift

    productsRequest не работает в быстрой для покупок в приложении

    Использование iOS 5 Twitter API для отправки частного сообщения?

    Давайте будем гением компьютера.