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

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

崩溃记录:

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

你可能感兴趣的:(根据友盟崩溃统计查找问题的方法)