【发布时间】:2013-11-17 18:36:10
【问题描述】:
我最近为我的应用程序推送了 iOS 7 更新,并在启用崩溃报告的情况下实现了 Flurry Analytics。我最近注意到一些用户遇到了崩溃。使用 Flurry,我可以在我的应用程序崩溃时检索堆栈跟踪以跟踪问题。
好吧,我当然熟悉崩溃报告,并且之前已经使用它们修复了错误,方法是从 iTunes Connect 或邮件中获取它们并在 Xcode 中简单地对它们进行符号化。然而,我使用 Flurry 并没有成功。
我尝试了什么:
在查看 Flurry 本身的堆栈跟踪时,我得到的是:
正如你所看到的,很多行都被完美地符号化了,其他的被符号化到<redacted>。
一些研究告诉我,Apple 在 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。我尝试了其他一些内存地址,每次输出都是内存地址本身。
有人可以帮我解决这个问题吗?我真的很想象征这些<redacted> 符号,因为它肯定会帮助我修复导致这些崩溃的错误。谢谢!
【问题讨论】:
-
这里的 Flurry 崩溃日志有同样的问题,并且经历了许多相同的步骤。我没有在跟踪中看到“编辑”,但除了函数名称之外没有得到更多信息——我很想获得像从设备崩溃日志中获得的崩溃报告那样的行号。
-
经过多次试验和错误以及一些丑陋的黑客攻击......我能够象征一些崩溃报告,但这并不总是有效。我最终切换到 Crashlytics 以获取崩溃报告,同时保留 Flurry 进行统计。像魅力一样工作!
标签: ios xcode crash-reports flurry