sigabrt без сообщения об ошибке - PullRequest
5 голосов
/ 17 октября 2011

У меня странная проблема, я получаю Sigabrt в главном цикле, но сообщение об ошибке не отображается, я много смотрел об этом в Интернете, но не смог найти ничего полезного.Поэтому мой вопрос будет, как отследить, что вызывает sigabrt без сообщения об ошибке?

Заранее спасибо.

Ответы [ 6 ]

14 голосов
/ 17 октября 2011

Когда ваша программа дает сбой, вы можете перейти к консоли отладчика и набрать bt (backtrace), которая даст вам представление о том, какой код выполнялся во время сбоя. Элементы верхнего уровня могут не быть вашим кодом, но если вы продолжите двигаться вниз, то в конце концов увидите что-то свое.

Если в вашем коде нет вызовов, то эти ошибки SIGABRT часто связаны с вашими файлами XIB, в файле XIB что-то будет отсутствовать, переименовано или иным образом изменено, что не будет отражено в вашем коде.

4 голосов
/ 04 октября 2016

Слишком долго я думал, что консоль не дает мне никакой информации с XCode 8, но потом я понял, что просто спрятал консоль и мне нужно было показать ее снова.

enter image description here

Для кого-то еще, застрявшего в странной мозговой деформации, как я был:

  1. Нажмите эту кнопку и посмотрите, что XCode говорит вам, что он сломан, исправьте это

  2. Наслаждайся жизнью снова!

2 голосов
/ 17 октября 2011

Для ошибок SIGABRT, запускайте в режиме отладки, пока не произойдет сбой программы. Затем должна быть маленькая черная кнопка с надписью «GDB» в желтом цвете над вашим редактором кода на панели мини-отладки. Нажмите на нее, и она вызовет вашу консоль отладчика. Это должно показать отчет о прекращении работы sig, возможно, оповещение о том, что оно было вызвано необработанным сгенерированным исключением, трассировку стека всех вызовов вложенных функций и, кроме того, одно или несколько сообщений, имеющих отношение к тому, что конкретно пошло не так.

Я не знаю, что не так с фактической ошибкой запуска, но вполне вероятно, что вы изменили имя некоторого класса в вашем коде, на которое ссылались ваши файлы xib, и не изменили ссылки в интерфейсе Builder.

эта ошибка появляется только тогда, когда приложение вызывает что-то, чего не хватает в ресурсах.

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

Проверьте все ваши вызываемые ресурсы в вашем коде и убедитесь, что они все еще в вашем проекте xcode. Даже изображения, используемые в Интерфейсном конструкторе, могут создавать SIGARBT.

Это досадная ошибка, потому что 9/10 раз отладчик не скажет вам, что не так.

2 голосов
/ 17 октября 2011

Вы смотрели в логах?

Вы пробовали запустить в отладчике? Он должен остановиться и дать вам трассировку стека при этом. Также попробуйте установить точку останова для всех исключений.

0 голосов
/ 12 января 2018

В моем случае проблема заключалась в том, что наблюдатель не был удален после того, как представление было отклонено.В частности, наблюдатель на @ "myLocation" в Картах Google.

Так что у меня есть это на viewDidLoad:

[self.mapView addObserver:self
               forKeyPath:@"myLocation"
                  options:NSKeyValueObservingOptionNew
                  context:NULL];

Но я никогда не удалял это, и я бы постоянно вылетал из моего приложения при закрытиипросмотр карты.

Я добавил это:

-(void)dealloc{
    [self.mapView removeObserver:self forKeyPath:@"myLocation"];
}

И проблема решена.

0 голосов
/ 06 августа 2015

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...