在分析我们的崩溃日志时,我发现一个相当常见的崩溃是一个甚至不在我自己的类中发生的崩溃。这些是外部崩溃日志,因此我不能重现这个问题。
由于我无法调试框架,我想知道,解决这个问题的可行方法是什么。
我唯一的线索是SIGSEGV可能是分段错误或无效指针。但就像我说的那样,因为我的Classes似乎似乎直接参与其中,这对我没有多大帮助。
崩溃:
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x6b636f6c
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x365c7f94 objc_msgSend + 43
1 CoreFoundation 0x31cd23fd -[NSObject performSelector:withObject:withObject:] + 52
2 UIKit 0x3291cfaf -[UIApplication sendAction:to:from:forEvent:] + 62
3 UIKit 0x3291cf6b -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 30
4 UIKit 0x3291cf49 -[UIControl sendAction:to:forEvent:] + 44
5 UIKit 0x3291ccb9 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 492
6 UIKit 0x3291d5f1 -[UIControl touchesEnded:withEvent:] + 476
7 UIKit 0x3291bad3 -[UIWindow _sendTouchesForEvent:] + 318
8 UIKit 0x3291b4c1 -[UIWindow sendEvent:] + 380
9 UIKit 0x3290183d -[UIApplication sendEvent:] + 356
10 UIKit 0x329010e3 _UIApplicationHandleEvent + 5826
11 GraphicsServices 0x3572d22b PurpleEventCallback + 882
12 CoreFoundation 0x31d4c523 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 38
13 CoreFoundation 0x31d4c4c5 __CFRunLoopDoSource1 + 140
14 CoreFoundation 0x31d4b313 __CFRunLoopRun + 1370
15 CoreFoundation 0x31cce4a5 CFRunLoopRunSpecific + 300
16 CoreFoundation 0x31cce36d CFRunLoopRunInMode + 104
17 GraphicsServices 0x3572c439 GSEventRunModal + 136
18 UIKit 0x3292fe7d UIApplicationMain + 1080
19 MyApp 0x0000321f main (main.m:14)
答案 0 :(得分:8)
此次崩溃可能是您出错的结果。如果你看一下堆栈顶部的几行,它应该给你一个关于错误的提示。
1 CoreFoundation 0x31cd23fd -[NSObject performSelector:withObject:withObject:] + 52
2 UIKit 0x3291cfaf -[UIApplication sendAction:to:from:forEvent:] + 62
3 UIKit 0x3291cf6b -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 30
4 UIKit 0x3291cf49 -[UIControl sendAction:to:forEvent:] + 44
看起来某个地方你有一个对象(可能是一个视图控制器),它为事件注册但是过早地被释放了。最好的办法是尝试在附加到调试器时重现这一点。首先检查处理UIControl回调的代码,例如UIButtons。