Сбой UIScrollView EXC_BAD_ACCESS в iOS SDK

У меня есть приложение iPhone SDK, в котором есть несколько представлений, которые появляются и исчезают, когда пользователь создает контент. После использования приложения на устройстве в течение некоторого времени я получаю следующий сбой:

Program received signal:  “EXC_BAD_ACCESS”.
(gdb) backtrace
#0  0x33369ebc in objc_msgSend ()
#1  0x320e5248 in -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded] ()
#2  0x338b4a14 in -[NSObject performSelector:withObject:] ()
#3  0x320e5098 in -[UIAnimator stopAnimation:] ()
#4  0x320e4b7c in -[UIAnimator(Static) _advance:] ()
#5  0x320e4a34 in LCDHeartbeatCallback ()
#6  0x34350e60 in HeartbeatVBLCallback ()
#7  0x332e91c0 in IOMobileFramebufferNotifyFunc ()
#8  0x316532f8 in ?? ()
#9  0x33866b50 in __CFMachPortPerform ()
#10 0x338ae52a in CFRunLoopRunSpecific ()
#11 0x338adc1e in CFRunLoopRunInMode ()
#12 0x3434e1c8 in GSEventRunModal ()
#13 0x32002c30 in -[UIApplication _run] ()
#14 0x32001230 in UIApplicationMain ()
#15 0x00002ff8 in main (argc=1, argv=0x2ffff550) at /Developer/svn/MyCompany/iPhone/MyApplication/Other Sources/main.m:14

Как видно из трассировки, единственное упоминание о моем коде там - это вызов main.

Я запустил Build and Analyze из Xcode, а также настроил его для запуска анализатора clang в моем проекте из Терминала, и оба они не могут найти никаких проблемы в коде. Я использую самую последнюю версию iOS SDK (я еще не загрузил 4.1, но я использую тот, который был в выпуске непосредственно перед 4.1).

Кроме того, я запускал приложение в Инструменты с симулятором, и приложение не имеет утечек памяти.

Я собираюсь попробовать использовать переменную NSZombieEnabled и посмотреть, найдет ли это что-нибудь, но проблема в том, что мне нужно использовать приложение в течение 30-40 минут или около того, прежде чем произойдет сбой, и я подозреваю, что NSZombieEnabled может даже не помочь мне найти проблему.

Похоже, что сбои, которые я видел, происходят, когда модальное представление вызывает делегата в родительском контроллере представления. Затем родительский контроллер представления выполняет некоторую обработку, прежде чем отклонить контроллер модального представления. В сбое есть некоторые ссылки на анимацию и прокрутку представлений, но я не уверен, что я мог сделать, чтобы вызвать у них проблемы. Есть ли у кого-нибудь предложения, что искать?

РЕДАКТИРОВАТЬ: Я установил флаг NSZombieEnabled в приложение, и на устройстве в консоли появляется следующее сообщение:

2010-09-11 17:10:33.970 MyApplication[9321:207] *** 
-[MyViewController respondsToSelector:]: message 
sent to deallocated instance 0x7489480

Насколько я могу судить, я устанавливаю для делегатов, используемых в приложении, значение nil в деаллоках всех моих классов, поэтому я застрял в том, где искать дальше.

Я попытался использовать ] malloc_history адресная команда pid для этого, но он сказал, что не может найти процесс, я попробовал 9321, 9321: 207 и 207. Кроме того, если я попытаюсь использовать переменную MallocStackLogging , программа не будет работать на устройстве, я получаю связка malloc: не может создавать сообщения каталога журнала стека в консоли и сбой программы.

Да, кстати, я не могу использовать проверку зомби в инструментах, так как она делает не работает с устройством, и я не могу получить такой же сбой в симуляторе.

36
задан Vineet Singh 16 August 2013 в 11:22
поделиться