Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
SergioK
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 7
#1

Программа вылетает с ошибкой EXC_? (11). Почему? - Программирование iOS/iPhone

15.05.2013, 19:00. Просмотров 1136. Ответов 13
Метки нет (Все метки)

Комрады, надеюсь на вашу помощь.
Решил тряхнуть стариной (лет 13 назад в вузе изучал делфи) и попробовать написать игрушку для дочки на iPad. Гляди может еще кому-то понравится)
За основу взял Cocos2D

В общем почти все получилось, пока игра в симуляторе iOS не начала падать с ошибкой Thread:1 EXC_??? (11) (code=0, subcode=0x0).
Причем падает она даже в тот момент, когда ничего не происходит: никаких пользовательских функций, циклов и прочего.
Программа просто ждет нажатие одной из кнопок меню.

Выглядит это примерно так: Одна сцена, один слой, спрайт фоном на весь экран. На фоне еще от 150 до 700 спрайтов (массив) размером 15 на 15 пкс. + 14 кнопок (по 7 для каждого игрока в виде двух CCMenu). К нажатию на кнопку привязана функция обработки касания.

Причем вылететь может через 1-2 минуты, а может не вылететь. Чем больше спрайтов на экране, тем выше вероятность падения.

Складывается ощущение, что обычная прорисовка коксовских спрайтов занимает слишком много ресурсов и система рушит приложение...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
15.05.2013, 19:31     Программа вылетает с ошибкой EXC_? (11). Почему? #2
Это что то с памятью, тут точно сказать нельзя. Надо смотреть по ходу, там или оно получить доступ пытается к чему-то что уже удалено или может где-то утечка. Утечку можешь проверить в instruments. Если что то с неправильным доступом то надо брейкпоинты ставить и смотреть. Где-то что то не создается или наоборот раньше времени релизится.
SergioK
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 7
16.05.2013, 09:43  [ТС]     Программа вылетает с ошибкой EXC_? (11). Почему? #3
Были такие мысли, но меня смущает то, что вылетает она в момент бездействия. Т.е. я создаю объекты, массивы, обрабатываю их, вывожу поле на экран и всё: дальше требуется нажатие одной из кнопки для обработки. Так вот программа может рухнуть даже если ничего вообще не нажимать пару-тройку минут...
В этот момент никаких пользовательских вычислений и манипуляций не происходит (ожидает нажатие кнопки), а программа падает...

Нашел на форуме Кокоса аналогичную проблему (чел говорит, что падпет в функции draw при прорисовке спрайтов), но ему так никто и не ответил ((. Такое возможно из-за утечки памяти?

Я создаю несколько массивов, потом в функции dealloc делаю им release. Остальные объекты кокосовские, которые должны сами очищаться (они вроде создаются как autorelease).
Вобщем засада какая-то.

В другой ветке челу предложили сделать многопоточность (не знаю, помогло ли ему), но в моем случае я даже не знаю что в другой поток засовывать...
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.05.2013, 11:12     Программа вылетает с ошибкой EXC_? (11). Почему? #4
Похоже на то, что пытается отрисоваться уничтоженный спрайт. Или спрайт, который для отрисовки требует уничтоженный объект. Вы ненужные спрайты с родительских убираете? При уничтожении массивов своих, например.
SergioK
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 7
16.05.2013, 11:23  [ТС]     Программа вылетает с ошибкой EXC_? (11). Почему? #5
Цитата Сообщение от mobidevelop Посмотреть сообщение
Похоже на то, что пытается отрисоваться уничтоженный спрайт. Или спрайт, который для отрисовки требует уничтоженный объект. Вы ненужные спрайты с родительских убираете? При уничтожении массивов своих, например.
Не думаю, что это так. Ведь программа вылетает в тот момент, когда ничего, кроме ожидания касания, не происходит.
Все спрайты нарисованы и мы просто ждем касания, ничего при этом нового не рисуется, старое не убирается.

Ненужных спрайтов у меня нет. При нажатии на кнопку в некоторых спрайтах просто меняется текстура и всё. При этом ошибок не всплывает - функции отрабатывают без ошибок.

Во время работы программы довольно сильно нагружается проц... может как-то не так рисуются спрайты?.. или их слишком много?... FPS во время работы проги с положенных 60 падает до 10-12...
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.05.2013, 11:34     Программа вылетает с ошибкой EXC_? (11). Почему? #6
Тогда Xavier прав. Прямая дорога в Instruments. Смотреть на выделение памяти, на то, какой метод больше всех процессор жрет и кто его так сильно дергает.
SergioK
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 7
16.05.2013, 12:00  [ТС]     Программа вылетает с ошибкой EXC_? (11). Почему? #7
Time Profiler говорит, что 96% процессорного времени уходит на функцию [CCSprite draw] (glDrawArrays (GL_TRIANGLE_STRIP, 0, 4))...

И как же мне теперь оптимизировать рисование спрайтов? ))
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.05.2013, 12:33     Программа вылетает с ошибкой EXC_? (11). Почему? #8
Количество спрайтов можно посмотреть. В Allocations. Может, все-таки есть лишние.
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
16.05.2013, 16:19     Программа вылетает с ошибкой EXC_? (11). Почему? #9
Кстати, а спрайтов много? и как вы их подгружаете по-отдельности? Или используете spritesheet ?
Если спрайтов много для оптимизации нужно создавать spritesheet и его использовать.

Добавлено через 8 минут
Как раз и нагрузка на проц будет меньше ибо меньше вызовов open gl функций и памяти меньше используется.
SergioK
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 7
16.05.2013, 16:38  [ТС]     Программа вылетает с ошибкой EXC_? (11). Почему? #10
Спрайтов много: один - фон на весь экран, на нем еще массив из 660 штук, но уникальных текстур всего 7 (7 картинок в 7-ми файлах - я их сначала из файлов загружаю в массив, а потом уже из этого массива наполняю большой массив спрайтов и добавляю их [self addChild:] ).

Spritesheet еще не изучал - посмотрю, что это такое...

Погонял Instruments. После запуска программы Overall Bytes постоянно растет (даже при простое программы), но Leaks утечек не находит.
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
16.05.2013, 16:43     Программа вылетает с ошибкой EXC_? (11). Почему? #11
ууу тут без spriteSheet походу не обойтись, не удивительно что fps падает)
spriteSheet или texture atlas создаются в программе такой как texure packer или например zwoptex. И для работы с ними не надо знать ничего особенного (это теже текстуры только упакованные в один файл), но пользы ого ого
SergioK
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 7
16.05.2013, 17:26  [ТС]     Программа вылетает с ошибкой EXC_? (11). Почему? #12
Спасибо, покапаюсь в этом направлении
SergioK
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 7
07.06.2013, 17:19  [ТС]     Программа вылетает с ошибкой EXC_? (11). Почему? #13
Вернулся из отпуска и продолжил...

так вот, создал я spriteSheet, как советовали умные головы, в программе zwoptex, подцепил к проекту, загрузил из него фон (для проверки, без доп. элементов) - и при запуске приложения fps сразу падает до 20! Больше никаких элементов, никаких функций? ничего...
имхо, это ненормально...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2013, 11:48     Программа вылетает с ошибкой EXC_? (11). Почему?
Еще ссылки по теме:

Почему к url приписываются символы %0A%20%20 ?
При нажатии на кнопку приложение вылетает Swift
Swift Вылетает эмулятор с ошибкой
Swift Swift почему else if не находит условие

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
10.06.2013, 11:48     Программа вылетает с ошибкой EXC_? (11). Почему? #14
Погонял Instruments. После запуска программы Overall Bytes постоянно растет (даже при простое программы), но Leaks утечек не находит.

--> Скорее всего это учетка, Leaks - и не покажет... т.к ты не уничтожаешь главную сцену. Попробуй к примеру сделать сделать так... Загружается приложение в сцене "пустышки" при таче на которую ты загружаешь свою главную сцену... И при таче в левом верхнем углу ты загружаешь опять сцену "пустышку" и выгружаешь предыдущую сцену. И убедись что действительно вызывается dealloc в главной сцене. После чего запускаешь анализатор, и наслаждаешься утечками...
--> Для одинаковых спрайтов исп CCSpriteBatchNode, т.е в проекте у тебя их будет 7 экземпляров
--> + исп ли у тебя в твоих спрайтах прозрачность, к примеру в бекграунде - прозрачности скорее всего нет, возможно тогда стоит поменять формат...
C#
1
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGB565];
Yandex
Объявления
10.06.2013, 11:48     Программа вылетает с ошибкой EXC_? (11). Почему?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru