Сбой приложения iOS перед входом в main () с Xcode 4.2 и iOS 5 - PullRequest
13 голосов
/ 10 октября 2011

Фон

После обновления / до / Я испытываюпадает, когда приложение загружается и за до оно даже вводит main().

Я установил точку останова в main(), но она никогда не достигается.

main() break point

  • Компиляция проекта в Xcode 4.1 с Base SDK из 4.3 отлично работает на iOS 4.x и iOS 5.
  • Компиляция того же проекта в Xcode 4.2 сBase SDK из 5.0 отлично работает на 4.x, но вылетает в iOS 5, как на симуляторе, так и на устройстве.

Сбой симулятора

iOS 5 Simulator LLDB Crash Xcode 4.2 Output

Сбои с EXC_BAD_ACCESS

Stack calls

Список вызовов, все системные вызовы, даже main() еще не были вызваны.

Моя лучшая догадка - проблема с загрузкой библиотеки, но я знаю, как ее отследить!

Попытки с разрешением

  1. Включено зомби
  2. Включено все лogging
  3. Добавлены разные версии системных библиотек (libz.1.2.5.dylib и libz.dylib)
  4. Очистил проект
  5. Удалил приложение из симулятора
  6. Удалить папку Derived Data

Ответы [ 12 ]

10 голосов
/ 13 октября 2011

Какова ваша цель развертывания?

Моей целью развертывания была iOS4.0.Я изменил его на iOS4.3, и проблема решена!(Разумеется, на основе iOS5 GM SDK.) Теперь мое приложение работает в симуляторе iOS 5.

Я получил эту идею от ответа в другом потоке SO о том, что ARC поддерживается в iOS4.3 и выше.Насколько я могу судить, мое приложение не использует ARC и зависимые от него библиотеки.В ответе также говорилось что-то о слабом обнулении ссылок, что казалось ... возможно, уместным, поскольку многие люди успешно удаляли определенные директивы компоновщика, касающиеся слабых ссылок на libSystem.B.dylib.

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

РЕДАКТИРОВАТЬ

Стоит отметить, что этот проект изначально был сделан под Xcode3, так что в самом проекте, скорее всего, есть какая-то странная ошибка, которая и не нужна, и вызывает эту проблему.Но я буду проклят, если смогу его найти!

РЕДАКТИРОВАТЬ 2

Ну, хорошо, хорошо ... при дальнейшей проверке ... Я нашел 2 ошибочные ссылки на libSystem.B.dylib в моем файле project.pbxproj, который не был виден в настройках сборки Xcode, но который мне пришлось удалить вручную с помощью текстового редактора!

После этого я сбросил базовую версию развертывания до 4.0, созданную дляСимулятор iOS5 и приложение работали без проблем.

Удивительно.

Урок: никогда не стоит недооценивать шансы на наличие мусора в файле проекта.

РЕДАКТИРОВАТЬ 3

Xcode project edit

Удаление трех вхождений этих строк в файле project.pbxproj внутри пакета проекта Xcode (щелкните правой кнопкой мыши и отобразите содержимое пакета).

show package contents

2 голосов
/ 30 ноября 2011

Я поигрался с диагностикой схемы, и получил то же самое поведение, случайно включив «Enable Guard Malloc».Я нацелился на 4.3 и работал под ARC на 5.0 Simulator.Приложение будет нормально работать при запуске из симулятора, но не из XCode.Перейдите в Product-> Edit Scheme ..., выберите элемент «Выполнить» в таблице слева, а затем на вкладку «Диагностика» справа.Снимите флажок «Включить охрану Malloc».

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

Проверьте флаги компоновщика. Для некоторых библиотек, которые вы, возможно, использовали, требовался такой флаг:

-weak_library /usr/lib/libSystem.B.dylib

Слабое связывание позволяло строить под iOS 4.x с целью развертывания 3.x. По какой-то причине он полностью сломан в симуляторе.

1 голос
/ 24 февраля 2012

У меня была похожая проблема с тестированием логических модулей (запуск отдельной цели без зависимости от основного приложения в симуляторе iOS), в моей ситуации проблема была в lldb, вот более подробно:
Сбой тестов логических модулей

1 голос
/ 31 января 2012

У меня была точно такая же диагностика, но решение было совершенно другим.

Однако решение, описанное в ответах здесь, не сработало для меня, потому что я не нашел «слабых» проблем в моем проекте. Pbxproj

Однако я обнаружил, что причиной моей проблемы была тупиковая ситуация в методе +(void)initialize, вызываемом из основного потока. В этом методе я звонил dispatch_sync(dispatch_get_main_queue(), ^{[some block code]}). Изменение этого значения на dispatch_async (обратите внимание на «а») решило мою проблему.

То, как я обнаружил проблему, было случайно. Хотя казалось, что ничего не происходит, «потоковый» навигатор XCode сообщал мне, что само приложение не разбилось. И я случайно нажал на «паузу» в отладчике. И вдруг он остановился именно там, где был тупик. Что после некоторых мыслей просто логически очевидно.

1 голос
/ 27 октября 2011

Я пробовал все в сообщениях rjstelling и MarkGranoff безрезультатно. Теперь я могу воспроизвести это, отключив Guard Malloc в моей схеме отладки. Страж Маллока включен - сбой, выключение - сбой нет. У меня никогда не было проблем на устройстве, только симулятор. Сначала я применил исправления в посте выше, поэтому я не знаю, решило бы это проблему без этих изменений или нет. Надеюсь, это поможет кому-то еще.

0 голосов
/ 15 сентября 2018

В моем случае это был -objc флаг в Other Linker Flags. Я должен был удалить это, и это работало как очарование.

0 голосов
/ 14 ноября 2016

Сбой приложения перед вводом main.m может произойти, если связанная структура не будет скопирована, например, из-за того, что в проекте используется Carthage, а /usr/local/bin/carthage copy-frameworks фаза сборки *1003* отсутствует.

0 голосов
/ 30 ноября 2011

Охрана мальлока была проблемой и для меня. Возможно, потому что я использую libxml2.2.7.3.dylib.

Этот вопрос описывает тот же сбой, но ему повезло, что он включил охрану Маллока, поэтому было очевидно, что вызвало сбой. Я только что получил сбой после обновления Xcode до 4.2.

Я бы хотел включить трассировку стека, чтобы она была Googleable. У меня были проблемы с поиском этой страницы.

#0  0x00000000 in <????> ()
#1  0x99924ef3 in mig_get_reply_port ()
#2  0x9991e70c in mach_ports_lookup ()
#3  0x0141c124 in _xpc_domain_init_local ()
#4  0x01419eb1 in _libxpc_initializer ()
#5  0x8fe2a15b in __dyld__ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE ()
#6  0x8fe29cc0 in __dyld__ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE ()
#7  0x8fe27220 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#8  0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#9  0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#10 0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#11 0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#12 0x8fe281c0 in __dyld__ZN11ImageLoader15runInitializersERKNS_11LinkContextERNS_21InitializerTimingListE ()
#13 0x8fe1c626 in __dyld__ZN4dyld24initializeMainExecutableEv ()
#14 0x8fe20ef2 in __dyld__ZN4dyld5_mainEPK12macho_headermiPPKcS5_S5_ ()
#15 0x8fe1a2ef in __dyld__ZN13dyldbootstrap5startEPK12macho_headeriPPKclS2_ ()
#16 0x8fe1a063 in __dyld__dyld_start ()
0 голосов
/ 11 ноября 2011

Вы можете применить флаг компоновщика условно к iOS SDK, но не к iPhone Simulator в XCode 4.

Выберите «Другие флаги компоновщика», нажмите «Добавить параметр сборки», выберите «Добавить условный параметр» и примените -weak_library /usr/lib/libSystem.B.dylib только для iOS SDK.

Это позволяет сборкам симулятора по-прежнему работать.

...