分析堆栈报告,例如:
2015-12-28 23:16:39.258 NSLogDemo[1010:65404] -[ViewController func]: unrecognized selector sent to instance 0x7fb2cb517fc0
2015-12-28 23:16:39.262 NSLogDemo[1010:65404] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController func]: unrecognized selector sent to instance 0x7fb2cb517fc0'
*** First throw call stack:
(
0 CoreFoundation 0x0000000108201e65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000107c78deb objc_exception_throw + 48
2 CoreFoundation 0x000000010820a48d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x000000010815790a ___forwarding___ + 970
4 CoreFoundation 0x00000001081574b8 _CF_forwarding_prep_0 + 120
5 UIKit 0x00000001085b1194 -[UIApplication sendAction:to:from:forEvent:] + 92
6 UIKit 0x00000001087206fc -[UIControl sendAction:to:forEvent:] + 67
7 UIKit 0x00000001087209c8 -[UIControl _sendActionsForEvents:withEvent:] + 311
8 UIKit 0x000000010871faf8 -[UIControl touchesEnded:withEvent:] + 601
9 UIKit 0x000000010862049b -[UIWindow _sendTouchesForEvent:] + 835
10 UIKit 0x00000001086211d0 -[UIWindow sendEvent:] + 865
11 UIKit 0x00000001085cfb66 -[UIApplication sendEvent:] + 263
12 UIKit 0x00000001085a9d97 _UIApplicationHandleEventQueue + 6844
13 CoreFoundation 0x000000010812da31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
14 CoreFoundation 0x000000010812395c __CFRunLoopDoSources0 + 556
15 CoreFoundation 0x0000000108122e13 __CFRunLoopRun + 867
16 CoreFoundation 0x0000000108122828 CFRunLoopRunSpecific + 488
17 GraphicsServices 0x000000010b9faad2 GSEventRunModal + 161
18 UIKit 0x00000001085af610 UIApplicationMain + 171
19 NSLogDemo 0x0000000107777b4f main + 111
20 libdyld.dylib 0x000000010a95592d start + 1
)
第一行代码的表示 不能识别ViewController 中的func方法
一条堆栈信息有5部分
19 NSLogDemo 0x0000000107777b4f main + 111
① ② ③ ④ ⑤
第一部分:堆栈输出序列号,序号越大表示越早被调用
第二部分:调用方法(或函数)所属的框架(或库),上面信息中的是我们编写的项目名
第三部分:调用方法的内存地址,对我们用处不大
第四部分:调用方法(或函数)名,这个信息很重要
第五部分:调用方法编译后的代码偏移量,不是行号,没什么帮助
堆栈信息是要从下往上看的,下面的语句是NSLogDemo中的main函数调用UIKit中的UIApplicationMain方法
18 UIKit 0x00000001085af610 UIApplicationMain + 171
19 NSLogDemo 0x0000000107777b4f main + 111
最快的阅读方式是从上向下看,找到第二部分中第一个自己的方法 ,找到TA上一行中的第四部分,这个位置就是出错的地方
网友评论