сбой во внутреннем UIView (CALayerDelegate) actionForLayer - PullRequest
1 голос
/ 12 августа 2010

У меня непоследовательный сбой внутри этого внутреннего селектора. Исключением является EXC_BAD_ACCESS, поэтому что-то повреждено. Сбой трудно воспроизвести, и как только он произошел, он не подлежит отладке, так как UIView, который действует как получатель, не может быть проверен. У кого-нибудь есть предложения, как отлаживать этот сбой? Я даже не могу сказать, какой UIView действует как получатель. Вот один стек со сбоем, но не единственный:

0  0x00396731 in -[UIView(CALayerDelegate) actionForLayer:forKey:] ()
1  0x029a3222 in -[CALayer actionForKey:] ()
2  0x029a084e in actionForKey ()
3  0x029a07b5 in beginChange ()
4  0x029a5487 in CALayer_setter ()
5  0x029a814c in -[CALayer setContentsRect:] ()
6  0x004216c7 in -[UISegment _updateBackgroundImage] ()
7  0x0041d497 in -[UISegment _commonInitWithInfo:position:autosizeText:] ()
8  0x0042119d in -[UISegment initWithInfo:style:size:barStyle:tintColor:position:isDisclosure:autosizeText:] ()
9  0x0041fd1e in -[UISegmentedControl(Static) _createSegmentAtIndex:position:withInfo:] ()
10 0x00423d61 in -[UISegmentedControl _resetForAppearanceChange] ()
11 0x0041dd4d in -[UISegmentedControl initWithCoder:] ()
12 0x00643f97 in UINibDecoderDecodeObjectForValue ()
13 0x006455d2 in -[UINibDecoder decodeObjectForKey:] ()
14 0x005706ff in -[UIRuntimeConnection initWithCoder:] ()
15 0x00570c7a in -[UIRuntimeEventConnection initWithCoder:] ()
16 0x00643f97 in UINibDecoderDecodeObjectForValue ()
17 0x0064388f in UINibDecoderDecodeObjectForValue ()
18 0x006455d2 in -[UINibDecoder decodeObjectForKey:] ()
19 0x0056fa0a in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:] ()
20 0x00571ad9 in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:] ()
21 0x00400fa6 in -[UIViewController _loadViewFromNibNamed:bundle:] ()
22 0x003ff030 in -[UIViewController loadView] ()
23 0x003fef0a in -[UIViewController view] ()
24 0x00008899 in -[QueueViewManager loadView] (self=0x4a8f900, _cmd=0x20f99c4) at /Users/shaheen/projects/QueueView/Classes/QueueViewManager.m:58
25 0x003fef0a in -[UIViewController view] ()
26 0x00008c1d in -[QueueViewManager setMainArea:] (self=0x4a8f900, _cmd=0x4557a, r={origin = {x = 0, y = 0}, size = {width = 1024, height = 719}}) at /Users/shaheen/projects/QueueView/Classes/QueueViewManager.m:76
27 0x000048a5 in -[MainViewController viewDidLoad] (self=0x4c51d60, _cmd=0x20f8069) at /Users/shaheen/projects/QueueView/Classes/MainViewController.m:179
28 0x003fef85 in -[UIViewController view] ()
29 0x00003590 in -[StartupFlowLogic viewControllerDismissed] (self=0x4c11e40, _cmd=0x45228) at /Users/shaheen/projects/QueueView/Classes/StartupFlowLogic.m:69
30 0x0000300a in -[SplashScreenViewController dismissComplete] (self=0x4c123d0, _cmd=0x45081) at /Users/shaheen/projects/QueueView/Classes/SplashScreenViewController.m:116
31 0x0038fd54 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] ()
32 0x0038fbe6 in -[UIViewAnimationState animationDidStop:finished:] ()
33 0x029d3933 in run_animation_callbacks ()
34 0x029d37da in CA::timer_callback ()
35 0x02aef7dc in CFRunLoopRunSpecific ()
36 0x02aee8a8 in CFRunLoopRunInMode ()
37 0x0329889d in GSEventRunModal ()
38 0x03298962 in GSEventRun ()
39 0x00371372 in UIApplicationMain ()

1 Ответ

4 голосов
/ 12 августа 2010

Я написал этот блог, чтобы помочь понять и отладить EXC_BAD_ACCESS

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

В порядке простоты

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

  2. Запуск с NSZombiesEnabled - это делает объекты никогда не освобождаемыми, а затемпожаловаться, если сообщение отправлено объекту с retainCount 0. 0. 1014 *

  3. Включите Guard Malloc, а затем используйте специальные команды GDB для проверки целостности кучи.Проблема в том, что вам нужно пройти и сделать это до того, как вы столкнетесь, чтобы найти реальную проблему.Это может привести к сбою где-то еще ближе к вашей проблеме, хотя

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