iOS 友盟统计的bug分析

前提:保留打包发布时的 myapp.xcarchive文件(注:在xcode-window-Organizer-Archives 中可以找到,通过命令打包需要自己当时备份下这个文件)

1、从myapp.xcarchive中得到myapp.app.dSYMmyapp 两个文件并放到同一个文件夹中

2、找到一条该版本app 在友盟bug统计中崩溃日志的,在其中可以找到崩溃时的地址信息如:0x1001ed424

友盟统计的崩溃log
Application received signal SIGSEGV (
null) ( 0 CoreFoundation 0x000000018400e5b8 <redacted> + 160 1 libobjc.A.dylib 0x00000001947600e4 objc_exception_throw + 60 2 CoreFoundation 0x000000018400e4dc <redacted> + 0 3 myapp 0x1005d0fdc myapp + 6098908 4 libsystem_platform.dylib 0x0000000194f7c94c _sigtramp + 52 5 myapp 0x1001ed424 myapp + 2020388 6 myapp 0x1001ed240 myapp + 2019904 7 myapp 0x1001ed364 myapp + 2020196 8 myapp 0x1001e6654 myapp + 1992276 9 myapp 0x10024a85c myapp + 2402396 10 libdispatch.dylib 0x0000000194da53ac <redacted> + 24 11 libdispatch.dylib 0x0000000194da536c <redacted> + 16 12 libdispatch.dylib 0x0000000194da9980 _dispatch_main_queue_callback_4CF + 932 13 CoreFoundation 0x0000000183fc5fa4 <redacted> + 12 14 CoreFoundation 0x0000000183fc404c <redacted> + 1492 15 CoreFoundation 0x0000000183ef10a4 CFRunLoopRunSpecific + 396 16 GraphicsServices 0x000000018d0935a4 GSEventRunModal + 168 17 UIKit 0x00000001888263c0 UIApplicationMain + 1488 18 myapp 0x10029b5dc myapp + 2733532 19 libdyld.dylib 0x0000000194dcea08 <redacted> + 4 ) dSYM UUID: BF6D8B68-25AD-3D83-9EFA-2EC4662771CC CPU Type: arm64 Slide Address: 0x0000000100000000 Binary Image: myapp Base Address: 0x0000000100064000

3、打开终端,切换到该文件夹,运行下面命令 终端中将显示错误出现的的详细信息

xcrun atos -arch arm64 -o myapp.app/myapp 0x1001ed424

或者

dwarfdump --lookup 0x1001ed424 -arch arm64 myapp.app.dSYM

注:对一些特殊复杂的bug引起的崩溃,通过此命令的分析,也得不到什么有用的错误信息提示。

关于dSYM

dSYM 在打包的过程中生成的保存app 16 进制函数地址映射信息的中转文件,通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名,从而得到错误详细信息。