根据友盟崩溃统计查找问题的方法

有一次去看友盟统计表,发现记录的很多崩溃统计,都看不太懂,也看不到具体崩溃的代码,所以去网上寻找定位崩溃代码的办法,下面是我觉得比较好的一种办法:

崩溃记录:

-[__NSArrayM overRect]: unrecognized selector sent to instance 0x1742528a0
(null)
((
    0   CoreFoundation                      0x00000001888aaff0 <redacted> + 148
    1   libobjc.A.dylib                     0x000000018730c538 objc_exception_throw + 56
    2   CoreFoundation                      0x00000001888b1ef4 <redacted> + 0
    3   CoreFoundation                      0x00000001888aef4c <redacted> + 916
    4   CoreFoundation                      0x00000001887aad2c _CF_forwarding_prep_0 + 92
    5   Butler                              0x100036f0c Butler + 225036
    6   AVFoundation                        0x00000001902f3310 <redacted> + 308
    7   AVFoundation                        0x00000001902f314c <redacted> + 100
    8   CoreMedia                           0x000000018b1c8f68 <redacted> + 260
    9   CoreMedia                           0x000000018b1e7e9c <redacted> + 224
    10  libdispatch.dylib                   0x00000001877629a0 <redacted> + 16
    11  libdispatch.dylib                   0x000000018776f604 <redacted> + 448
    12  libdispatch.dylib                   0x000000018777bc1c <redacted> + 204
    13  libdispatch.dylib                   0x00000001877648a0 <redacted> + 804
    14  libdispatch.dylib                   0x0000000187770964 <redacted> + 560
    15  libdispatch.dylib                   0x00000001877662cc <redacted> + 884
    16  libdispatch.dylib                   0x0000000187770964 <redacted> + 560
    17  libdispatch.dylib                   0x00000001877662cc <redacted> + 884
    18  libdispatch.dylib                   0x0000000187771950 <redacted> + 256
    19  libdispatch.dylib                   0x0000000187778170 <redacted> + 760
    20  libsystem_pthread.dylib             0x000000018796b08c _pthread_wqthread + 772
    21  libsystem_pthread.dylib             0x000000018796ad7c start_wqthread + 4
)

dSYM UUID: 7170B52B-0F44-32E0-B89A-C900C55AB3BE
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: Butler
Base Address: 0x00000001000cc000

类似这样的崩溃记录,由于不是必现的,一时很难找到崩溃的地方,下面就让我们一步一步的来找到崩溃的代码:

第一步:找到当时上传代码时使用的DYSM文件,这文件通常在.xcarchive文件中。 右键XXX.xcarchive文件, 然后通过终端(Terminal)工具打开。
第二步:进入到XXX.xcarchive文件的DWARF目录,下面是目录

~/Butler.xcarchive/dSYMs/XXX.app.dSYM/Contents/Resources/DWARF

第三步:然后执行下面的命令.就可以看到这处内存地址反编译回来的源码行。

//第一个YYYY表示CPUType(比如上面的arm64,跟友盟错误信息里的一致),XXX是崩溃统计里Binary Image所对应的名字,后面的是崩溃的内存地址
atos -arch YYYY -o XXX 0x1153b9

运行结果:

➜  DWARF atos -arch arm64 -o Butler 0x100036f0c  
-[XJHPlateIDScanViewController captureOutput:didOutputSampleBuffer:fromConnection:] (in Butler) (XJHPlateIDScanViewController.mm:154)

这样就可以看到崩溃的代码了!!!

最后注意:如果定位到的地址是UmengSignalHandler,这个不是错误,是捕捉crash的方法,本身不引起crash, 当crash发生时由它来捕捉,直接忽略crash log中的 UmengSignalHandler 部分即可。

参考链接:http://blog.csdn.net/smking/article/details/9342899

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文就捕获iOS Crash、Crash日志组成、Crash日志符号化、异常信息解读、常见的Crash五部分介绍。...
    xukuangbo_阅读 1,598评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,602评论 25 708
  • 周六,实验做到特别晚才去吃晚饭,估计再也没有哪所大学会荒凉如此了,走出校门,没有街,没有商场,视线可及的地方是黄土...
    炽曳阅读 302评论 0 3
  • 一但遇到了解决不了的事,我都会选择逃避,只是在眼下看起来是最好的选择。 因为,也没别的选了。
    小诗鸽阅读 240评论 0 0
  • 像对每位异性都怀有期待一样 来看望我 问候手掌上的缺口,问候干糙的脸颊 ———请竭力付出一点 用来吻吻我的落满灰尘...
    汤米呢阅读 256评论 0 3