简述
在我们测试或者公司测试人员测试app的时候,难免会遇到闪退的问题,这时候我们并不是将手机连接到Xcode进行调试,以致于具体的闪退信息无法追踪到,当然我们也可以继续连接到Xcode上进行问题重新,可不幸的是并不是每个问题都是能够如愿以偿的重现,还有就是当app已经上线了,我们更是无从得知哪里出问题了,这时候我们就需要将Crash文件找到,然而找到之后却是下面这样子,看不到具体是哪个方法哪个地方出现了什么样的问题,这时候我们就需要将这些看不懂的东西进行符号化(symbolicate)
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
Triggered by Thread: 0
Filtered syslog:
None found
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x000000018f6c0e64 0x18f6a2000 + 126564
1 libsystem_pthread.dylib 0x000000018f78cc5c 0x18f786000 + 27740
2 Clash of Clans 0x000000010035d670 0x1000b4000 + 2791024
3 Clash of Clans 0x0000000100191cc4 0x1000b4000 + 908484
4 Clash of Clans 0x0000000100104ac4 0x1000b4000 + 330436
5 Clash of Clans 0x0000000100343a6c 0x1000b4000 + 2685548
6 QuartzCore 0x00000001938d6600 0x1938cc000 + 42496
7 QuartzCore 0x00000001938d64b0 0x1938cc000 + 42160
8 IOKit 0x0000000190933dd4 0x19092e000 + 24020
9 CoreFoundation 0x000000019065d958 0x19059a000 + 801112
10 CoreFoundation 0x0000000190675adc 0x19059a000 + 899804
11 CoreFoundation 0x000000019067527c 0x19059a000 + 897660
12 CoreFoundation 0x0000000190672d90 0x19059a000 + 888208
13 CoreFoundation 0x00000001905a2d94 0x19059a000 + 36244
14 GraphicsServices 0x000000019200c074 0x192000000 + 49268
15 UIKit 0x000000019685b130 0x1967e6000 + 479536
16 Clash of Clans 0x0000000100348cb4 0x1000b4000 + 2706612
17 libdyld.dylib 0x000000018f5b159c 0x18f5ad000 + 17820
那应该怎么做呢,有两种情况:闪退的app是不是在你本机进行打包的;
- 本机: 那就可以直接用Xcode的Organizer中直接对Crash进行符号化
- 非本机: symbolicatecrash 命令,dSYM文件
然而不管那种情况,我们都需要找到其crash的日志
- 上线的app,则需要从Organizer中下载crash文件,当然需要用户的"诊断与用量"是"自动发送状态",你才能够下载到。
- 正在新版本开发的app,需要从闪退的真机中的隐私中找到对应的crash日志。
- 以前的版本是在"设置->隐私->诊断与用量->诊断与用量数据"中,现在变成了"设置->隐私->分析->分析数据"中,这些数据可以通过iTunes进行同步到Mac和Xcode上。
查找Crash文件
通过iTunes同步之后在相应的路径下查找Crash文件
Mac :
~/Library/Logs/CrashReporter/MobileDevice/
Windows :
C://Users//AppDataRoamingApple/ComputerLogsCrashReporterMobileDevice/
Xcode:
Xcode->Window->Devices->View Device Logs
如果同步机制无法同步出来或无法同步,直接在手机上进行复制粘贴,制作成Crash文件
查找symbolicatecrash
find /Applications/Xcode.app -name symbolicatecrash -type f
查找dSYM
Xcode 8在organizer下download dSYMs...会出现问题:No dSYMs were found for Version ... Build ...
且在Archive的文件夹下也没有没有相应的文件,可以尝试
/Users/<username>/Library/Developer/Xcode/DerivedData/<appName-乱码>/Build/Intermediates/<appName>.build/Debug-iphoneos
或通过Spotlight查找dSYM
符号化
将找到的文件放到同一个目录文件夹下,打开终端执行以下命令
1、cd <目录>
2、export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
3、./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
打开symbol.crash即可看到符号化后的Crash
参考:
更详细的步骤:
1、iOS调试之 crash log分析
2、Xcode崩溃日志分析工具symbolicatecrash用法
3、Understanding and Analyzing Application Crash Reports