umeng 友盟错误报告处理

今天发现友盟的后台中出现了app crash,打开一看:

Application received signal SIGSEGV
(null)
(
    0   CoreFoundation                      0x2e44bf23  + 154
    1   libobjc.A.dylib                     0x38bdece7 objc_exception_throw + 38
    2   CoreFoundation                      0x2e44be4d  + 0
    3   ?????????                           0x00107a51 ????????? + 735825
    4   libsystem_platform.dylib            0x391f671b _sigtramp + 34
    5   UIKit                               0x30f20765  + 64
    6   UIKit                               0x30c9a7bd  + 604
    7   UIKit                               0x30f216db  + 1398
    8   UIKit                               0x30d4d3f7  + 418
    9   UIKit                               0x30d4d24f  + 30
    10  UIKit                               0x30d4d207  + 30
    11  UIKit                               0x30c7b977  + 378
    12  UIKit                               0x3116a977  + 110
    13  libobjc.A.dylib                     0x38bee0d3  + 358
    14  CoreFoundation                      0x2e37f4c1 _CFAutoreleasePoolPop + 16
    15  UIKit                               0x30c73bc1  + 36
    16  CoreFoundation                      0x2e417039  + 20
    17  CoreFoundation                      0x2e4149c7  + 286
    18  CoreFoundation                      0x2e414d13  + 738
    19  CoreFoundation                      0x2e37f769 CFRunLoopRunSpecific + 524
    20  CoreFoundation                      0x2e37f54b CFRunLoopRunInMode + 106
    21  GraphicsServices                    0x332dc6d3 GSEventRunModal + 138
    22  UIKit                               0x30cde891 UIApplicationMain + 1136
    23  ?????????                           0x0007bfd3 ????????? + 163795
    24  libdyld.dylib                       0x390dcab7  + 2
)
dSYM UUID: xx-XXX-38B1-B7A0-2XXXXX
CPU Type: armv7s
Slide Address: 0x00004000
Binary Image: ???
Base Address: 0x00054000

因为没有相应的dsym信息,所以出错后没有办法symbolicate,也就看不到具体是那个方法引起的。这时我们就要通过上传的archive包,来查找相应地址对应的函数。这里需要说明的是,因为程序的bundle设置为了中文,所以会有上述的_?????_出现。因此,我们也可以得到,程序中引起crash的方法对应的函数地址是0x0007bfd3
接下来,我们在xcode找到上传成功的archive包,通过_show in finder_定位。xarchive后缀的文件和app后缀的文件一样,也是个bundle,可以通过右键show content 打开。我们需要使用的可执行程序包,通常在:

/Products/Applications/YourAppName.app/YourAppName

然后使用命令:
atos -arch armv7s -o /Products/Applications/YourAppName.app/YourAppName 0x0007bfd3
这样就会显示出是哪一个方法引起crash了。