Гладкий код, но SIGABRT - PullRequest
       19

Гладкий код, но SIGABRT

0 голосов
/ 25 февраля 2012

Журнал сбоя SIGABRT с устройства указывает на строки:

NSArray *results = [self.managedObjectContext executeFetchRequest:request &error];
  if ([results count] > 0 ) { // SIGABRT on this line.

и (для того же устройства):

if (myfunc(myobj)) { // SIGABRT on this line.

где myobj - указатель, который должен быть равен нулю из конфигурации приложения, и он инициализируется в строке непосредственно перед строкой сбоя. myfunc - это функция, похожая на:

BOOL myfunc(id object) {
  return object != nil;
}

так что я бы рассмотрел второй сбой как

myobj = something
if (myobj != nil) { // SIGABRT on this line.

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

У кого-нибудь были такие проблемы или есть опыт отладки?

1 Ответ

0 голосов
/ 25 февраля 2012

Нет способа, как сравнение указателей может привести к сбою.Кроме того, если myfunc не является указателем на функцию, if (myfunc(myobj)) не может произойти сбой.

Код Objective C также не имеет проблем.

Вы уверены, что интерпретируете выходные данные отладчика?правильно?Правильны ли символы отладки?Попробуйте отключить оптимизацию.

Возможно, вы смотрите не на тот стек: проверьте все стеки потоков.

SIGABRT - это сигнал, отправляемый процессу, чтобы сообщить, что что-то не так.Может быть, это просто iOS убивает ваше приложение, потому что память заканчивается.Или процесс нажмет abort() из-за неудачного утверждения.

...