Как я могу узнать, почему мое приложение, работающее в симуляторе, внезапно падает
Я использую рубиновое движение. Ниже приведены подробности моего окружения.
$ motion --version
2.9
$ bundle
Using bubble-wrap (1.4.0)
Using motion-require (0.0.7)
Using formotion (1.6)
Using motion-layout (0.0.1)
Using thor (0.18.1)
Using rubymotion_generators (0.1.0)
Using bundler (1.3.5)
Когда я запускаю свое приложение и нажимаю кнопку, которая, как предполагается, загружает форму, созданную с помощью формирования, мое приложение внезапно падает с этим сообщением об ошибке.
* Сеанс симулятора завершился с ошибкой: Error Domain=DTiPhoneSimulatorErrorDomain Code=1 "Имитированное приложение закрылось." UserInfo=0x10011e200 {NSLocalizedDescription= Симулированное завершение работы приложения. DTiPhoneSimulatorUnderlyingErrorCodeKey=-1}
Бег с rake debug=1
Я вижу следующее:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0xc7243c89
0x0081309f in objc_msgSend ()
(gdb)
Мое приложение работало отлично до обновления rubymotion, и как только я обновил rubymotion, мне также пришлось обновить некоторые из моих драгоценных камней.
Как я могу решить эту проблему или устранить ее?
2 ответа
Первое, что нужно сделать, когда вы дойдете до этой точки останова, - это получить обратный след. Часто это укажет вам правильное направление. Другой способ просмотреть информацию - открыть консоль, а затем запустить / завершить работу приложения. Посмотри, что происходит.
Как говорит @Jamon, GC обычно пожинает это, когда вы этого не ожидали.
Это почти всегда, когда вы пытаетесь получить доступ к объекту, который был освобожден. Попробуйте изменить вашу переменную на переменную экземпляра (@myvar
) или глобальный ($myvar
) и посмотрите, решит ли это проблему. Очевидно, вы не хотите использовать глобал в производстве, но попробуйте.