Создание с помощью LLVM и любой оптимизации приводит к сбою приложения при запуске

Когда я пытаюсь создать мое приложение с 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?

Ответ 1

Переход на Xcode 4.0.2.

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

Ответ 2

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

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

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

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

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