2010-07-25 3 views
5

У меня есть программа, которая отлично работает на устройстве в конфигурации Debug, но не работает как Release. У кого-нибудь есть этот опыт и как его исправить?приложение работает как отладка, но выходит из строя как выпуск

Thx

+0

Вы должны увидеть мой ответ на этот вопрос, и он (sorta) даст вам ответ на то, что вы ищете: http://stackoverflow.com/questions/3261557/why-is-windows-phone- 7-emulator-so-slow-compare-to-um-iphone-os-emulator/3261644 # 3261644 – 2010-07-25 04:16:51

+0

Я посмотрел на него, но это не поможет. Обе версии, о которых я упоминаю, работают на устройстве, а не в симуляторе. В тренажере все идеально. –

+0

Я получаю в этой точке: они оба разные, и именно поэтому он терпит неудачу. – 2010-07-25 04:48:23

ответ

1

Сообщение

Некоторые

Улики!

Что вы подразумеваете под "fail"? Сбой? Повесьте? Выкладывается для использования в памяти? Каковы симптомы неудачи? Получил назад? У вас что-нибудь в коде, которое ведет себя по-разному в отладке или выпуске? Любой #ifdef DEBUG тип shenanigans? asserts с побочными эффектами? Вы возились с настройками компилятора? Получил C++? Ассамблея?

Я вижу намек на разгадку в комментариях; незаконный доступ к переменной. Скорее всего, это вызвано тем, что оптимизатор снова использует слот стека быстрее, чем debug. Что, в общем, сводится к проблеме с высвобождением.

Даже при создании для выпуска вы все равно можете включить обнаружение зомби.

Также, вы сделали построить и проанализировать и устранить любые проблемы, которые он указывает?

15

Я столкнулся с той же проблемой - App работал отлично на тренажере и устройства в режиме отладки, но ни в режиме выпуска (он будет устанавливать, а просто отобразить SplashScreen)

  • Xcode 4.3.2
  • IOS Deployment Target 4,3

Я продолжал видеть ответы на StackOverflow, что сказал, что это проблема управления памятью, но это не имеет никакого смысла для меня, так как отладочная версия работала прекрасно, когда загружен в мой iPhone 4S. Я также проверил Build Settings, чтобы узнать, что отличается между двумя режимами, и я пропустил одно различие, которое имело значение в конце - оптимизация компилятора.

В параметрах сборки -> под компании Apple LLVM компилятор 3,1 генерации кода - Level> Оптимизация, измените настройки от значения по умолчанию самый быстрый, самый маленький [-Os] к Нет [-O0] Release. Исправлена ​​проблема.

Обнаружено, что решение в этом блоге: http://www.mindjuice.net/2011/11/30/how-to-fix-an-app-that-crashes-in-release-but-not-debug/.

Apple Documentation помогает, но не объясняет, почему делают как раз наоборот исправляет вещи:

оптимизации кода любого рода результат в медленнее строить раз из-за дополнительной работы, участвующих в процессе оптимизации. Если ваш код меняется, как и во время цикла разработки, вы не хотите, чтобы оптимизация была включена. Однако, когда вы приближаетесь к концу цикла разработки, конфигурация сборки релиза может дать вам представление о размере вашего готового продукта, поэтому подходит самый быстрый, самый маленький вариант.

Отсутствует: Компилятор не пытается оптимизировать код. Используйте этот параметр во время разработки, когда вы сосредоточены на решении логических ошибок и нуждаетесь в быстром компиляции. Не используйте этот параметр для доставки вашего исполняемого файла.

Самый быстрый, самый маленький: Компилятор выполняет все оптимизации, которые обычно не увеличивают размер кода. Это предпочтительный вариант для доставки кода, потому что он дает вашему исполняемому файлу меньший объем памяти.

+0

В приведенной вами документации говорится: «Не используйте эту опцию [Нет] для доставки вашего исполняемого файла». Но это вы сделали? –

Смежные вопросы