今天发现友盟的后台中出现了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了。
Comments