Сборка с LLVM и любая оптимизация приводят к сбою приложения при запуске - PullRequest
10 голосов
/ 30 марта 2011

Когда я пытаюсь построить свое приложение с LLVM 2.0 в XCode 4.0.1 и с любым уровнем или оптимизацией, которые не являются ничем (что-либо, кроме -O0), приложение вылетает после того, как я запускаю его на устройстве (симулятор в порядке).Кажется, я не могу отладить сбой, поскольку это не происходит, когда я встраиваю xcode и подключаюсь через GDB / LLDB.Кроме того, сбой происходит только тогда, когда я собираю приложение в командной строке с помощью xcodebuild;Построение через XCode IDE не приводит к сбою даже при одинаковых настройках проекта.Я не вижу никакой полезной информации в журналах сбоев, так как сбой происходит вне моего кода:

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

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   ???                             0x00b53400 0 + 11875328

Он не будет правильно символизировать, поскольку не знает, в какой библиотеке произошел сбой.

На консоли устройства отображаются некоторые операторы NSLog, которые наше приложение делает при запуске, затем пользовательский интерфейс первого экрана загружается и рисуется, и после этого происходит сбой.Сборка без оптимизации или сборка с GCC 4.2 с любым уровнем оптимизации работает нормально.

Что здесь может происходить, и как я могу его отладить?Что может XCode IDE делать по-другому при сборке и развертывании приложения по сравнению с интерфейсом командной строки xcodebuild?

Ответы [ 2 ]

9 голосов
/ 30 марта 2011

У нас была та же проблема с нашим приложением. Он влияет только на код armv6 в сборках Release / Distribution и, следовательно, только на iPhone 3G и iPod Touch 2G. Но вопреки вашему описанию, его можно было воспроизвести с помощью XCode (мы не используем xcodebuild).

Очевидно, что сгенерированный код повреждает указатель стека. Как следствие, вы не можете его отладить, а журналы сбоев бесполезны. С помощью отладчика он может остановиться на viewWillAppear: анимированный первого представления, которое должно отображаться. Но вскоре после этого приложение всегда зависало.

Переход на более старый компилятор решил проблему.

Я подал ошибку в Apple. Пожалуйста, подайте тоже, как говорят, чтобы повысить приоритет ошибки.

Есть еще люди, сообщающие о той же проблеме:

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

Обновление до Xcode 4.0.2.

Это исправило эту проблему (сбой при запуске ARMv6, но не ARMv7 с включенной оптимизацией) для нас.

...