[英]Symbolicating an iOS 7 crash report using Flurry Crash Analytics
我最近为我的应用推出了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崩溃报告拖到XCode Organizer,您需要:
在报告顶部添加事件标识符行。 这看起来像一个GUID,因此您可以放置任何唯一的或在线生成一个 ,例如
事件标识符:D1D6CA1F-EC87-4677-9366-401BE050B2C8
添加iOS和崩溃报告版本行(在例外类型上方),例如
操作系统版本:iOS 7.1.1(11D201)
报告版本:104
<redacted>
是仅针对系统符号的iOS优化。 atos
到symbolicate系统符号与您的应用程序二进制/的dSYM不起作用(如上所述) atos
示例中,您正在尝试一个已在堆栈跟踪中显示正确符号的地址。 因此,对于一个例子0x3a99ed7b
的的libdispatch.dylib
库将是:
xcrun atos -arch armv7 -o PathToLibrary -l LoadAddressOfLibrary 0x3a99ed7b
Mac上iOS符号的根路径是:〜/ Library / Developer / Xcode / iOS DeviceSupport /`,每个iOS版本都有一个子目录。
因此,简单的解决方案是:将崩溃报告拖到Xcode组织器的“ Device Logs
条目中,并希望您拥有所需的一切。 如果这不能删除至少一些<redacted>
字符串,则缺少iOS符号,手动步骤也不起作用。
这对我的乱跑日志起作用http://ipartymobile.com/how-to-find-your-bug-from-ios-crash-logs/没有为崩溃报告添加任何内容,只需占用内存地址并插入格式为“xcrun atos -arch armv7 -o MyApp 0x0000000”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.