Приложение iOS вылетает при каждом втором запуске, не удается найти ошибку

81

Когда я впервые запускаю приложение, кажется, что все работает нормально. Я нажимаю кнопку остановки, поработаю, и когда я снова запускаю его, кажется, что он вылетает еще до того, как успевает что-нибудь загрузить. Нажмите стоп, снова нажмите «Выполнить», и все работает нормально. Пока я не повторю процесс.

Здесь xcode выделяет ошибку с помощью «Thread 1: signal SIGABRT». Тут явно ничего полезного.

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([PokerAppDelegate class]));
    }
}

Консоль отладки ничего не показывает, кроме (lldb) (так что я предполагаю, что она останавливается, а не дает сбой в этот момент) Итак, когда я выполняю BTэто, я получаю:

(lldb) bt
* thread #1: tid = 0x1c03, 0x9a258a6a libsystem_kernel.dylib`__pthread_kill + 10, stop reason = signal SIGABRT
    frame #0: 0x9a258a6a libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x99ea1b2f libsystem_c.dylib`pthread_kill + 101
    frame #2: 0x04a7057b libsystem_sim_c.dylib`abort + 140
    frame #3: 0x01dc0b4e GraphicsServices`GSRegisterPurpleNamedPort + 348
    frame #4: 0x01dc069f GraphicsServices`_GSEventInitialize + 123
    frame #5: 0x01dc0c1f GraphicsServices`GSEventInitialize + 36
    frame #6: 0x000163f9 UIKit`UIApplicationMain + 600
    frame #7: 0x00001d0d Guitar Chord Poker HD`main(argc=1, argv=0xbffff32c) + 141 at main.m:16
    frame #8: 0x00001c35 Guitar Chord Poker HD`start + 53
(lldb) 

Вот что я сделал до сих пор:

  • Выполнен "Чистый"
  • Я сбросил симуляторы и перезагрузил свой компьютер
  • Я закомментировал весь код в контроллере представления, все еще вылетает
  • Я закомментировал весь код в делегате приложения, все еще вылетает
  • НО .... Я запустил приложение на устройстве за пределами Xcode, и, похоже, оно работает отлично.
  • (РЕДАКТИРОВАТЬ) Я удалил / переустановил xcode и весь контент (симуляторы, документы) из различных папок кеша (это не позволяет xcode автоматически переустанавливать старые после новой загрузки). Тем не менее, все еще не могу найти, где хранятся инструменты командной строки. По-прежнему вылетает.

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

Дело в том, что у меня не было проблем до последнего обновления Xcode. Может быть, ошибка Xcode?

(EDIT) Я также использую последние версии OSX для разработчиков. Может ли это мешать?

Beau Nouvelle
источник
Вы пробовали запустить пустой проект на симуляторе iOS и на подключенном / отключенном устройстве?
Reck Hou
@ReckHou Хорошо, да, такая же проблема в новом проекте. Что может быть причиной? Есть ли способ обойти это, кроме переустановки xcode?
Beau Nouvelle
У нас уже есть два человека с этой проблемой. (после последнего обновления я получаю аналогичную ошибку) В настоящее время я использую AppCode до следующего обновления Xcode с исправленной ошибкой. (Мой вопрос stackoverflow.com/questions/16113036/… )
Илья Ильин
5
Я начал видеть то же самое после обновления до OSX 10.8.4 ранее сегодня. У меня не было проблем с Xcode 4.6.2 на OSX 10.4.3. Проблемы, кажется, исчезнут, если я переключусь с LLDB на GDB, поэтому это может быть вызвано отладчиком (Xcode 4.6.2 LLDB в сочетании с OSX 10.8.4).
Matej Bukovinski
1
У меня то же самое после обновления до 10.8.4. Каждый второй запуск. Сбросить симулятор, перезапустить Xcode, без разницы. Немедленный сбой в main (). Каждый второй запуск. Спасибо за идею GDB - здесь она работает.
Грэм Перкс

Ответы:

75

Кажется, это комбинация OS X 10.8.4 и LLDB . Как говорит Кенстер, переход на GDB решает проблему.

Редактировать:
это вызвано состоянием гонки на сервере отладки (я слышал).

Вот исправление, если вы хотите продолжать использовать LLDB: вместо того, чтобы нажимать «Выполнить», когда приложение уже запущено в симуляторе, убейте его в Xcode (⌘-.), Скажите «Я люблю Xcode» 5 раз и запустите его снова (⌘- Р). Не вылетает, тестировал.


Исправлено в Xcode 4.6.3.

Неванский король
источник
Это действительно не работает. Запуск довольно сильно задыхается через раз. Переход на GDB - гораздо более стабильное решение, пока Apple не исправит свои проблемы.
Джонни
2
Вы и спрашивающий - мои новые личные любимые люди. Это сводило меня с ума, когда я собирался отправить свой MBP на ремонт.
Kalle
В 10.9 и Xcode 5 GDB был удален, и теперь это все LLDB. Но все работает как надо!
Beau Nouvelle
Ах! Возврат к устаревшему компилятору просто для исправления (действительно болезненной) ошибки в новейшем компиляторе - большая проблема… Но выбора нет, мне придется это сделать.
MonsieurDart
Обновление до 4.6.3 сделало это - я даже не знал, что вышла версия.
Дэвид Х,
11

У меня тоже была эта проблема. Взгляните на этот пост. Приложение Xcode 4.6.2 аварийно завершает работу при каждом втором запуске

В основном измените свой отладчик с LLDB на GDB. Я не могу поверить, что это произошло из-за того, что LLDB глючит.

Кенстер
источник
Боже мой .... Исправлено. Я так привыкла к этому, что каждый раз, когда запускаю проект, все время готовлюсь к ярости. Но ничего не происходит. Куча благодарностей. Сообщу Apple об этом в моем отчете об ошибке.
Beau Nouvelle
2
Спасибо за информацию, вчера сводила меня с ума весь день. Почему я всегда жду, пока я вырву все свои (оставшиеся) волосы, прежде чем искать ЗДЕСЬ! СМЕШНО.
Берти
3

Переключение на GDB или перезагрузка устройства / хоста не решает проблему в моей среде.

Однако изменение цели Run в связанной схеме XCode так, чтобы она больше не запускалась автоматически, а вместо этого указывала «Подождите, пока запустится HelloWorld .app» .

Единственный недостаток в том, что это подразумевает запуск приложения на устройстве вручную. Затем подключится отладчик.

Мекуги
источник