2011-11-03 3 views
0

Lorsque j'exécute mon application IOS (sur le simulateur IPad ou le périphérique réel), j'obtiens une erreur EXC_BAD_ACCESS. Normalement, je n'aurais aucun problème à résoudre ce problème, mais l'erreur vient en profondeur dans le système lui-même, et après la recherche autour de je suis coincé comment procéder avec le dépannage.Dépannage cryptique EXC_BAD_ACCESS sur l'application IOS

Quelqu'un peut-il me donner des idées sur ce qui se passe ou comment résoudre ce problème? Je travaille avec un énorme projet et sans aucune indication du message d'erreur je ne sais pas par où commencer.

Merci!

#0 0x0230609b in objc_msgSend() 
#1 0x0206943d in CFRetain() 
#2 0x0214e9c0 in +[__NSArrayI __new::]() 
#3 0x020a200a in -[__NSPlaceholderArray initWithObjects:count:]() 
#4 0x009aa2dc in -[CALayerArray copyWithZone:]() 
#5 0x02164bd9 in -[NSObject copy]() 
#6 0x016bb0fa in -[UIView dealloc]() 
#7 0x02306e4d in _objc_rootRelease() 
#8 0x0206e435 in CFRelease() 
#9 0x0214fe94 in -[__NSArrayM dealloc]() 
#10 0x02306e4d in _objc_rootRelease() 
#11 0x02306e10 in objc_release() 
#12 0x02307c60 in (anonymous namespace)::AutoreleasePoolPage::pop(void*)() 
#13 0x02096ed8 in _CFAutoreleasePoolPop() 
#14 0x012619f9 in -[NSAutoreleasePool release]() 
#15 0x0168af78 in _UIApplicationHandleEvent() 
#16 0x035dffa9 in PurpleEventCallback() 
#17 0x021361c5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__() 
#18 0x0209b022 in __CFRunLoopDoSource1() 
#19 0x0209990a in __CFRunLoopRun() 
#20 0x02098db4 in CFRunLoopRunSpecific() 
#21 0x02098ccb in CFRunLoopRunInMode() 
#22 0x016872a7 in -[UIApplication _run]() 
#23 0x01688a9b in UIApplicationMain() 
#24 0x0020f2a4 in main at /..../main.m:17 
+1

Cela ne vous aidera pas à tracer le problème directement, cela m'a beaucoup aidé à comprendre que WTF fonctionnait avec ces erreurs: http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html – Tim

+1

NSZombieEnabled (recommandé dans un lien dans ce lien) est également un bon endroit pour commencer avec ceux-ci. – jrturton

Répondre

1

Ma première supposition serait que vous libérez une vue qui est déjà autoeleased. Par exemple:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[self.view addSubview:myButton] 
[myButton release]; 

Vous pouvez également afficher deux fois une vue ou libérer une vue dont l'aperçu est parti.

Si possible, vous pouvez envisager de déplacer le projet vers ARC car il résout la plupart de ces problèmes (mais pas tous!). Sinon, le meilleur moyen de le déboguer est probablement de #ifdef des parties de votre code jusqu'à ce que le crash disparaisse, puis de remettre le code jusqu'à ce qu'il se bloque à nouveau.

+0

Merci pour les suggestions. J'ai fini par commenter des parties successives du code et j'ai découvert que j'étais en train de désallouer un objet deux fois (: – Locksleyu

1

De la trace de la pile, vous pouvez travailler sur les éléments suivants:

1) Il est à voir avec la piscine autorelease

2) Un tableau est libéré

3) Je suppose que ce tableau contient des UIViews (peut-être)

4) Dans le cadre de UIView dealloc, quelque chose se passe horriblement mal

C'est pas utile, désolé :)

Le autorelease au début de la trace de la pile vous indique qu'il est presque certainement quelque chose que vous ne l'avez pas conservé quelque chose d'assez :)

Y at-il vue particulier que cette erreur se produit?

Questions connexes