Как отследить причину SIGABRT - PullRequest
41 голосов
/ 10 ноября 2011

Я показываю код этой проблемы в качестве примера, но на самом деле мой вопрос: как мне отследить и понять ошибки SIGABRT?Я прочитал этот вопрос: sigabrt без сообщения об ошибке , однако я не думаю, что это относится к моей проблеме.

Пример, который я покажу ниже, очевидно, не является проблемой xib, и предыдущие попытки получить SIGABRT скорее были связаны с необработанными исключениями.Я пытался использовать GDB bt, но это не помогает.Нет ли более полного дампа для просмотра?Я также использовал NSZombie, но я действительно не понимаю, как его использовать, поэтому, если это ваш ответ, пожалуйста, предоставьте ссылку на документацию о том, как я должен получить соответствующие данные из него.

Вот мой пример: я пытаюсь использовать Core Data.Мой проект изначально не был настроен на него, поэтому мне пришлось добавить его вручную, что я и сделал, перейдя в мой проект> Фазы сборки> Связать двоичные файлы с библиотеками> нажав плюс и добавив CoreData.framework

Затем я создал свою модель данных, выбрав Файл> Создать> Модель данных.Я создал довольно много атрибутов, и это все

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

//code removed, as its not needed for the question/answer

После этого я просто попытался сохранить значение в управляемом объекте (еще раз, код скопирован из реализации по умолчанию с новым проектом):

//code removed, as its not needed for the question/answer

Но все, что я получаю, когда явыполнить метод addTime - ошибка SIGABRT.

xcode error

1 Ответ

72 голосов
/ 10 ноября 2011

SIGABRT повышается, когда объект получает неосуществленное сообщение. Сколько предупреждений есть в вашем приложении? Попробуйте просмотреть их и найти те из них, которые предупреждают вас о том, что «какой-то объект может не реагировать на некоторые селекторы». Если вы очистите свое приложение от всего этого, то, скорее всего, оно будет работать правильно.

РЕДАКТИРОВАТЬ: Ответ из комментариев ниже, которые очень полезны:

хорошо, здесь идет тяжелая артиллерия - вы пробовали использовать контрольные точки? открыто шестая вкладка в проводнике проекта, в левом нижнем углу нажмите + -> Добавить точку останова исключения -> Готово. Это добавит обработчик исключений, который остановит ваше приложение на самом вызове метода, который падает приложение.

РЕДАКТИРОВАТЬ: Начиная с xCode 5.0> Вам больше не нужно указывать, какое исключение ваша точка останова будет перехватывать во время создания точки останова. Вам просто нужно нажать + -> Добавить точку останова исключения, и вы в порядке.

enter image description here

...