flurry 崩溃日志代码定位
用symbolicatecrash工具分析iOS Crash文件+通过atos符号化崩溃报告
1.写测试crash代码(方便检测最后crash是否定位正确 **MineViewController-xima方法-485行)
2.代码中flurry sdk打开crash追踪(默认为NO)
3.打包ipa(命名一个特别的版本号,防止记混,我用的4.3.0.1/4.3.0.2 正常线上使用4.xx.xx),真机安装ipa,执行crash,制造crash数据。flurry后台上传dsym文件(上传dsym文件方法可参考上一篇文章添加链接描述)可查看到crash数据制造成功
4.测试数据制造完成,开始crash反定位:桌面创建crash文件夹,文件夹中放入3个文件(PRODUCT_NAME.app.dSYM、PRODUCT_NAME.crash、symbolicatecrash)
1).应用的.dSYM文件(路径:/Users/用户名/Library/Developer/Xcode/Archives)或者(xcode-Window-Organizer-Archives-Show in Finder-显示包内容-dSYMs-PRODUCT_NAME.app.dSYM)
2) .crash文件从Flurry后台直接export,找到对应的crash-Export-crashReport.txt 将crashReport.txt重命名 工程名.crash放到crash文件夹
也可从真机中.拿crash 文件可以:(xocde–>Window --> Devices and Simulators --> View Device Logs — > 右键 export Log导出到桌面文件夹crash)
3).工具symbolicatecrash:(终端:find /Applications/Xcode.app -name symbolicatecrash -type f 会把symbolicatecrash的路径打印出来,通过路径找到文件把它复制到新建的文件夹crash)
EC071066222A05M:~ test$ find /Applications/Xcode.app -name symbolicatecrash -type f
//文件路径
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
4).记得以上三个文件要确保关系正确,确定dSYM、app以及crash文件的关系的方法:
每一个xx.app, xxx.app.dSYM文件都拥有相应的uuid,crash文件也有uuid,只有三者uuid一至才表明之三者可以解析出正确的日志文件
查看xx.app文件的uuid的方法,在terminal中输入命令:
dwarfdump --uuid xxx.app/xxx (xxx工程名)
查看xx.app.dSYM文件的uuid的方法,在terminal中输入命令:
dwarfdump --uuid xxx.app.dSYM (xxx工程名)
而.crash的uuid位于,crash日志中的Binary Images:中的第一行尖括号内或者中间包含改udid不一定在第一行。如:
armv7 <8bdeaf1a0b233ac199728c2a0ebb4165>
5.生成 symbol.crash文件
终端今天此文件路径:
1.cd /Users/wangyan/Desktop/crash
2.export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
3. ./symbolicatecrash ./.crash ./.app.dSYM > symbol.crash(例如: ./symbolicatecrash ./M.crash ./Example.app.dSYM/ > symbol.crash )
( symbol.crash为自定义的输出文件名)
此时文件夹中会出现 symbol.crash我们认识的crash文件
7.通过atos分析符号化的 symbol.crash文件,定位到crash所在的具体代码行
找出 symbol.crash含有工程名字的那一行crash日志,cd到crash目录然后
xcrun atos -o projectName.app.dSYM/Contents/Resources/DWARF/projectName-l 0x1043b4000 -arch arm64 0x104437eb0
然后就可以参看到crash所在的类,方法 和代码行数(**MineViewController-xima-485行,验证正确)
如果是从flurry后台导出的crash日志,生成的symbol.crash 0x1043b4000地址可能会展示为工程名称,对应的地址在Binary Images中第一行
参考文件
相关博客文章