Приложение iOS вылетает под 3.1.3 при компиляции с LLVM2 - PullRequest
0 голосов
/ 09 апреля 2011

У меня есть приложение для iOS со следующими (выбранными) настройками сборки в XCode 4.0.1:

  • Архитектура = Стандартная (armv6 armv7)
  • Базовый SDK = Последняя версия iOS (iOS 4.3)
  • Цель развертывания iOS = iOS3.1
  • Другие флаги компоновщика = -lxml2 -weak-library /usr/lib/libSystem.B.dylib

В разделе «Цели / фазы сборки» у меня есть libSystem.B.dylib в качестве опции (связать двоичные файлы с библиотеками).

На iPod Touch 1-го поколения я получаю следующие результаты:

  1. Debug Build, версия компилятора C / C ++ = LLVM Compiler 2.0, все в порядке
  2. Специальная сборка выпуска, версия C / C ++ компилятора = GCC 4.2, все в порядке
  3. Специальная сборка выпуска, Версия компилятора C / C ++ = LLVM GCC 4.2, все в порядке
  4. Специальная сборка выпуска, версия компилятора C / C ++ = LLVM Compiler 2.0, сбой через несколько секунд после запуска.

В случае 4. отчет о сбое выглядит следующим образом:

Incident Identifier: 10B8B9C5-0FA5-4C83-AB13-4C3F59D5962D
CrashReporter Key:   29f7901a33e9b055c9034cd051902ea0c87e61f6
Process:         TPE [1484]
Path:            /var/mobile/Applications/4FA4C8CA-DB5D-4096-8458-C76382E68D02/TPE.app/TPE
Identifier:      TPE
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2011-04-09 17:56:58.188 +1000
OS Version:      iPhone OS 3.1.3 (7E18)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000
Crashed Thread:  0

Thread 0 Crashed:
0   libSystem.B.dylib               0000000000 0 + 0

Thread 1:
0   libSystem.B.dylib               0x00001488 mach_msg_trap + 20
1   libSystem.B.dylib               0x00004064 mach_msg + 60
etc.

Сбой происходит после выполнения ряда подпрограмм в моем кодеd (я вижу, что вывод консоли подтверждает это).

У кого-нибудь есть идеи, что может заставить это работать в GCC4.2, но аварийно завершить работу в LLVM2?

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Та же проблема все еще возникает с XCode 4.2 (4D199), когда код генерируется компилятором Apple LLVM 3.0.

Приложение AdHoc прекрасно работает на iOS5 на симуляторе, iPad1 и iPhone4.Тот же код AdHoc аварийно завершает работу на iPhone 3 и iPod3 на iOS 4.2.1 (8C148).

Код отладки отлично работает на всех платформах.

При возникновении проблемы журнал консоли показывает следующее:

SpringBoard[25] <Warning>: Received memory warning. Level=1
MobileSafari[283] <Warning>: Received memory warning. Level=1
configd[23] <Notice>: jetsam: kernel memory event (93), free: 241, active: 1109, inactive: 760, purgeable: 0, wired: 7878
configd[23] <Notice>: jetsam: kernel termination snapshot being created
com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilesafari[0xc614]) Exited: Killed
com.apple.launchd[1] <Notice>: (UIKitApplication:com.myapp.test[0x47db]) Exited: Killed
SpringBoard[25] <Warning>: Application 'MyApp' exited abnormally with signal 9: Killed

Пиковое использование памяти приложением составляет пару Мб.Код отладки никогда не достигает критического предела памяти.

Проблема исчезает, если:

  1. Для уровня оптимизации AdHoc установлено значение Нет (-O0)
  2. компилятор изменен на LLVM GCC 4.2

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

1 голос
/ 09 апреля 2011

Это просто дикая догадка, но недавно в llvm2 была ошибка компилятора, которая приводила к такому же падению нашего приложения.Это происходило только в режиме релиза с полной оптимизацией и только на старых устройствах (возможно, на конкретном процессоре).Мы вернулись к gcc, и все снова было хорошо.Тем временем Apple обновила свой компилятор, который «исправляет ошибки для iOS», но мы еще не тестировали его.

...