花时间总结了一下使用友盟错误统计来定位Crash位置的方法
-[NSNull count]: unrecognized selector sent to instance 0x3a491a60
(null)
(
0 CoreFoundation 0x2f981e9b + 154
1 libobjc.A.dylib 0x39cde6c7 objc_exception_throw + 38
2 CoreFoundation 0x2f9857b7 + 202
3 CoreFoundation 0x2f9840af + 706
4 CoreFoundation 0x2f8d2dc8 _CF_forwarding_prep_0 + 24
5 WeChatHelper WeChatHelper + 245693
6 WeChatHelper WeChatHelper + 26969
7 libdispatch.dylib 0x3a1c30c3 + 10
8 libdispatch.dylib 0x3a1c30af + 22
9 libdispatch.dylib 0x3a1c59a9 _dispatch_main_queue_callback_4CF + 268
10 CoreFoundation 0x2f94c5b1 + 8
11 CoreFoundation 0x2f94ae7d + 1308
12 CoreFoundation 0x2f8b5471 CFRunLoopRunSpecific + 524
13 CoreFoundation 0x2f8b5253 CFRunLoopRunInMode + 106
14 GraphicsServices 0x345ef2eb GSEventRunModal + 138
15 UIKit 0x3216a845 UIApplicationMain + 1136
16 WeChatHelper WeChatHelper + 391591
17 libdyld.dylib 0x3a1d7ab7 + 2
)
dSYM UUID: A925ED33-1D32-392F-BD92-52623DCE51A3
CPU Type: armv7s
Slide Address: 0x00004000
Binary Image: WeChatHelper
Base Address: 0x00059000
ios 使用友盟统计的错误分析时有些东西是无法定位到哪个方法或类出错了,只返回简单的内存地址。例如上面的错误代码
这时候我们需要自己去查找错误的方法或类,以便修复bug;大概操作步骤如下:
1、在Archives 中 选中一个,show in finder -->显示包内容-->在dSYMs 中有 xxxxxx.app.dSYM ,在Products/Applications 有xxxxxx.app 把这2个文件放在同一个文件夹里面。
2、打开终端 cd 到这个文件目录下
3、输入指令
xcrun atos -arch armv7s -o xxxxxx.app/xxxxxx 0xaf8a5
注:armv7s 是友盟错误里面的
CPU Type: armv7s
0x0004af6f 是错误信息地址
第二方法:可视化工具
下面这是我的项目里通过友盟统计到的崩溃日志,如果光看这些日志报告的话,是不会知道是哪行代码引起的。
使用方法是把对应版本的.xcarchive文件拖到工具。对比UUID和友盟里日志是否一致,一致就把错误的地址信息拷贝到箭头处。
即可得出具体代码崩溃位置。很简单吧。
dSYM 文件分析工具 http://answerhuang.duapp.com/index.php/2014/07/06/dsym_tool/
工具代码还是开源的:https://github.com/answer-huang/dSYMTools
地址:http://download.csdn.net/detail/totogo2010/8012367