如何阅读这个iPhone应用程序崩溃日志

时间:2012-08-24 09:32:22

标签: iphone objective-c debugging crash-reports

当我点击弹出视图控制器的按钮时,我的应用程序(名为MyLittleApplication)会随机崩溃。 我可以使用崩溃日志帮助(找出我应该从哪里开始查看):

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x600332e0
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x351faf78 objc_msgSend + 16
1   Foundation                      0x37d0a74c NSKVOPendingNotificationCreate + 216
2   Foundation                      0x37d0a652 NSKeyValuePushPendingNotificationPerThread + 62
3   Foundation                      0x37cfc744 NSKeyValueWillChange + 408
4   Foundation                      0x37cd3848-[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] + 176
5   Foundation                      0x37d55a14 _NSSetPointValueAndNotify + 76
6   UIKit                           0x311f825a -[UIScrollView(Static) _adjustContentOffsetIfNecessary] + 1890
7   UIKit                           0x31215a54 -[UIScrollView setFrame:] + 548
8   UIKit                           0x31215802 -[UITableView setFrame:] + 182
9   POViO                           0x000fcac8 0xf8000 + 19144
10  UIKit                           0x31211b8e -[UIViewController _setViewAppearState:isAnimating:] + 138
11  UIKit                           0x3126b8a8 -[UIViewController beginAppearanceTransition:animated:] + 184
12  UIKit                           0x3121490c -[UINavigationController _startTransition:fromViewController:toViewController:] + 832
13  UIKit                           0x312144fc -[UINavigationController _startDeferredTransitionIfNeeded] + 244
14  UIKit                           0x3125e8e4 _popViewControllerNormal + 184
15  UIKit                           0x3125e712 -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:] + 386
16  UIKit                           0x31242bba -[UINavigationController popToViewController:transition:] + 626
17  POViO                           0x001074e6 0xf8000 + 62694
18  CoreFoundation                  0x374553f6 -[NSObject performSelector:withObject:withObject:] + 46
19  UIKit                           0x311eae00 -[UIApplication sendAction:to:from:forEvent:] + 56
20  UIKit                           0x311eadbc -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 24
21  UIKit                           0x311ead9a -[UIControl sendAction:to:forEvent:] + 38
22  UIKit                           0x311eab0a -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 486
23  UIKit                           0x311eb442 -[UIControl touchesEnded:withEvent:] + 470
24  UIKit                           0x311e9924 -[UIWindow _sendTouchesForEvent:] + 312
25  UIKit                           0x311e9312 -[UIWindow sendEvent:] + 374
26  UIKit                           0x311cf68e -[UIApplication sendEvent:] + 350
27  UIKit                           0x311cef34 _UIApplicationHandleEvent + 5820
28  GraphicsServices                0x33c11224 PurpleEventCallback + 876
29  CoreFoundation                  0x374cf51c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
30  CoreFoundation                  0x374cf4be __CFRunLoopDoSource1 + 134
31  CoreFoundation                  0x374ce30c __CFRunLoopRun + 1364
32  CoreFoundation                  0x3745149e CFRunLoopRunSpecific + 294
33  CoreFoundation                  0x37451366 CFRunLoopRunInMode + 98
34  GraphicsServices                0x33c10432 GSEventRunModal + 130
35  UIKit                           0x311fdcce UIApplicationMain + 1074
36  MyLittleApplication                 0x000f90ae 0xf8000 + 4270
37  MyLittleApplication                 0x000f9048 0xf8000 + 4168

我怀疑它与notificationCenter和我使用的UIDeviceOrientationDidChangeNotifications有关。这是真的还是我看错了方向? 我在打电话

[notificationCenter removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil] 

viewDidUnload中,这足够了吗?

你能告诉我我应该开始寻找什么错误吗?

3 个答案:

答案 0 :(得分:1)

这是一个堆栈跟踪,您可以看到崩溃发生时调用的方法堆栈。 从底部开始,自己动手到顶部并从应用程序中搜索方法调用(stacktrace也包括来自框架的调用(例如-[UIScrollView(Static) _adjustContentOffsetIfNecessary]))。
来自您的应用程序的最顶层方法调用可能是您的错误的原因,您可以看到系统之后尝试了什么。

在您的情况下,似乎您调用popToViewController并且iOS框架尝试设置从一个UIViewController到下一个Exception Type: EXC_BAD_ACCESS (SIGSEGV)的转换动画。表视图似乎存在设置其框架并滚动到contentOffset的问题。

这可能是由内存错误引起的。您可以通过检查{{1}}来获得此提示 EXC_BAD_ACCESS可能暗示您尝试访问内存中不再存在的内容 - >已经发布了。

一般情况下,我会建议在Xcode中激活exveption断点: 您是否设置了异常断点?

  • 进入断点编辑器窗格
  • 点击左下角的x
  • 选择添加例外断点

现在,如果发生异常,您应该会看到堆栈跟踪。并且Xcode应该在崩溃发生的那一行。

你应该熟悉的第二件事是仪器中的僵尸模式 你可以在这个video中找到对zombi模式的一个很好的介绍。

答案 1 :(得分:0)

在您的情况下,您可以看到自己有EXC_BAD_ACCESS (SIGSEGV)。这意味着你正试图访问不在这里的东西,或者至少在这里,但现在已经不存在了。如果您可以复制错误,请尝试使用Instruments的Zombies模式,它会告诉您希望访问哪些内容。解决此问题的方法通常是您过早地将资源释放到您仍需要的资源中。

答案 2 :(得分:0)

您可能希望在方法中抛出一些NSLog语句,以便您可以了解出现问题的地方。有时那些iOS消息可能有点神秘。