我最近为我的应用推出了iOS 7更新,并启用了崩溃分析功能.我最近注意到有些用户正在遇到崩溃.使用Flurry我可以在我的应用程序崩溃时检索堆栈跟踪,以跟踪问题.
那么,我确实很熟悉崩溃报告,并且已经修复了使用它们的错误,然后通过从iTunes Connect或邮件中获取它们,并在 Xcode中简单地表示它们.然而,我并没有使用Flurry做到这一点.
那么,我确实很熟悉崩溃报告,并且已经修复了使用它们的错误,然后通过从iTunes Connect或邮件中获取它们,并在 Xcode中简单地表示它们.然而,我并没有使用Flurry做到这一点.
我试过的
在Flurry本身查看堆栈跟踪时,这是我得到的:
正如你所看到的,很多行都是完美的象征,其他的则被标示为<编辑>.
一些研究告诉我,苹果在iOS 6和7中剥离了很多调试符号.
我尝试的第一件事是上传自己的dSYM文件. Flurry报告dSYM文件被保存,并且崩溃报告再次被使用dSYM文件进行了符号化.然而,堆栈跟踪仍然与没有dSYM完全相同.
没问题,我想,我可以尝试下载崩溃报告,并使用Xcode进行符号化.
点击下载给我一个文件(没有扩展名,所以我将其重命名为.crash)与此内容:
Hardware Model: iPhone3,1 Process: RadioPlayer [2965] Path: /var/mobile/Applications/E4DD7DA6-4450-4538-A1E2-AE23139FAC10/RadioPlayer.app/RadioPlayer Identifier: ******* Version: 1.2.0 Code Type: ARM Parent Process: launchd [1] Exception Type: SIGSEGV Exception Codes: SEGV_ACCERR at 0x548a000 Crashed Thread: 2 Thread 0: 0 libsystem_kernel.dylib 0x3aa67a8c _mach_msg_trap + 20 1 CoreFoundation 0x3015e7cb <redacted> + 154 2 CoreFoundation 0x3015cf37 <redacted> + 854 3 CoreFoundation 0x300c7ce7 _CFRunLoopRunSpecific + 522 4 CoreFoundation 0x300c7acb _CFRunLoopRunInMode + 106 5 GraphicsServices 0x34da0283 _GSEventRunModal + 138 6 UIKit 0x32969a41 _UIApplicationMain + 1136 7 RadioPlayer 0x000dfb9b __mh_execute_header + 23451 8 libdyld.dylib 0x3a9c3ab7 <redacted> + 2 Thread 1: 0 libsystem_kernel.dylib 0x3aa6783c _kevent64 + 24 1 libdispatch.dylib 0x3a9a23f3 <redacted> + 38 Thread 2 Crashed: 0 vImage 0x2f19d7dc <redacted> + 139 1 vImage 0x2f1874ff _vImageFlatten_RGBA8888 + 378 2 vImage 0x2f26e799 <redacted> + 40 3 vImage 0x2f27d7c3 <redacted> + 674 4 vImage 0x2f27d365 _vImageConvert_AnyToAny + 1300 5 ImageIO 0x30efd9e7 <redacted> + 858 6 ImageIO 0x30ef8c3b <redacted> + 2754 7 ImageIO 0x30ef8173 <redacted> + 102 8 ImageIO 0x30ef8057 _CGImageDestinationFinalize + 66 9 UIKit 0x32a8a611 _UIImageJPEGRepresentation + 520 10 MediaPlayer 0x31435319 -[MPMediaItemArtwork imageDataWithSize:atPlaybackTime:] + 36 11 MediaPlayer 0x31435387 -[MPMediaItemArtwork albumImageDataWithSize:] + 42 12 MediaPlayer 0x31494f0d -[MPNowPlayingInfoCenter _pushNowPlayingInfoAndRetry:] + 824 13 libdispatch.dylib 0x3a99ed7b <redacted> + 10 14 libdispatch.dylib 0x3a99f2f3 <redacted> + 378 15 libdispatch.dylib 0x3a99f75b <redacted> + 38 16 libdispatch.dylib 0x3a9b18f9 <redacted> + 76 17 libdispatch.dylib 0x3a9b1b79 <redacted> + 56 18 libsystem_pthread.dylib 0x3aae0dbf __pthread_wqthread + 298 19 libsystem_pthread.dylib 0x3aae0c84 _start_wqthread + 8 // The file continues like this listing the other threads and overview of binary images. // I however didn't paste that part here since I don't think it's useful.
我现在尝试将这个文件拖到Xcode管理器并导入设备日志.两者根本没有.列表中还没有显示新的设备登录或其他任何内容.
下一步:尝试使用atos手动表示崩溃日志.我将dSYM的内容复制到工作目录等,然后尝试这个命令
xcrun atos -arch armv7 -o RadioPlayer 0x31435387`
这返回0x31435387.我尝试了一些其他内存地址,每次输出都是内存地址本身.
解决方法
我注意到为了能够将Flurry崩溃报告拖到XCode Organizer中,您需要:
>将文件重命名为.crash
>在报告顶部添加事件标识符行.这看起来像GUID,所以你可以把任何独特的或generate one online,例如
事件识别码:D1D6CA1F-EC87-4677-9366-401BE050B2C8
>添加iOS和崩溃报告版本行(高于异常类型),例如
操作系统版本:iOS 7.1.1(11D201)
报告版本:104