(null) libC++abi.dylib: завершить вызов, выбрасывая исключение
Я использую Xcode 4.5PR и iOS 6beta 2.
Я не изменил никаких кодов, мое приложение выдает исключение, указанное в заголовке.
Я использовал Debug Window, функция которого вызвала это исключение, но оно показало
0x38dda960: push {r4, r5, r6, r7, lr}
Как я могу найти проблему? Как я могу это исправить?
11 ответов
Если вы ничего не изменили, это может быть просто связано с бета-версией iOS 6 в ее нынешнем виде.
Однако для тех, кто ищет эту ошибку, вот несколько общих советов:
1) Это может быть симулятор, для которого вы решили создать такой же код:
Если вы не изменили исходный код, убедитесь, что ваша схема все еще указывает на тот же симулятор, с которым она в последний раз работала. (Например, попытка представить модальный контроллер вида (presentModalViewController:
), но забыв условно использовать поповер для iPad, это может быть причиной.)
2) Если трассировка стека и консоль бесполезны:
Иногда единственные вещи в стеке main
а также UIApplicationMain
, что затрудняет отслеживание того, что пошло не так в вашем собственном источнике. Скорее всего, это признак того, что что-то не так в методе встроенного фреймворка, который вы вызываете или вызываете для вызова.
Если в консоли нет ни одного метода или конкретного объекта и трассировка стека не указывает на какие-либо методы из ваших собственных классов, попытайтесь сузить выполнение как можно ближе к точке, в которой генерируется исключение. Выбирая точки останова в темноте, я склонен использовать подход бинарного поиска, выбирая опорную точку и перемещаясь вверх и вниз по порядку выполнения и выбирая новую "половинную" точку по мере необходимости.
Установите точку останова на исключениях C++, чтобы найти, где она генерируется.
Я застрял на этом довольно долго, а потом обнаружил, что могу получить стек трассировки EXACT исключения, установив точку останова для всех исключений.
Убедитесь, что вы используете предварительную версию (4.5) для xcode для разработчиков и не по привычке открываете выпускную версию (4.3.3), и определенно должны соответствовать бета-версии iOS, если вы не обновили настройки проекта, вы не можете запустить приложение на iOS 6 бета после обновления настроек проекта до iOS 6 приложение больше не будет работать на устройствах iOS 5.xx больше один на другой.
Эта ошибка обычно проявляется, когда вы вручную удаляете раскадровку из своего проекта и повторно настраиваете свой view-контроллер для использования без раскадровки. Убедитесь, что ваш контроллер представления добавлен к корневому контроллеру представления вашего окна в AppDelegate и что инициалы контроллера представления без имени пера (так как вы удалили бы это при удалении раскадровки) - И НАИБОЛЕЕ ВАЖНО удалите строки из вашего pList файл, который сообщает приложению, что файл раскадровки должен существовать, например "Основное имя файла раскадровки (iPad)" или "Основное имя файла раскадровки (iPhone)". Как только они исчезнут, ваше приложение перестанет искать раскадровку, и вы станете золотым, как золотой ретривер!
Иногда это может произойти, если вы просто упускаете библиотеку - я делал быстрый пример приложения с MKMapView, и у меня появилась эта ошибка до того, как я добавил MapKit.framework в свой проект.
Иногда возникает проблема, когда пользователь импортирует какой-либо фреймворк, поэтому также импортируйте этот фреймворк в файл.pch в папке ресурсов приложения. Надеюсь, это может помочь некоторым из вас.
Это происходит здесь, когда я устанавливаю контраст на объекте iso, присваивая его суперпредставлению
Это исключение может происходить по разным причинам. Лучший способ найти точную причину - это посмотреть на console
, Там вы найдете такой текст:
*** lorem ipsum lorem ipsum lorem ipsum
*** First throw call stack: (0x1d16012 0x16c3e7e 0xa4ef96 0x607704 0x6079a2 0x606876 0x617cb5 0x618beb 0x60a698 0x2b81df9 0x2b81ad0 0x1c8bbf5 0x1c8b962 0x1cbcbb6 0x1cbbf44 0x1cbbe1b 0x60617a 0x607ffc 0x1d1d 0x1c45) libc++abi.dylib: terminate called throwing an exception
Здесь текст lorem ipsum
до First throw call stack
точно определит причину возникновения исключения. Исправьте эту проблему, и вы готовы к работе.
Это происходило со мной и ушло, когда я установил -ObjC в "Другие флаги компоновщика"
Причина возникновения этой ошибки...
У меня была эта ошибка после изменения имени некоторых переменных iboutlet в моих файлах.h и.m, но не в ссылках раскадровки для этих переменных. После повторной ссылки все снова заработало нормально. Надеюсь, что это может помочь некоторым из вас.