美文网首页DevSupportiOS 开发工具iOS 进阶学习
Bugly符号化iOS 崩溃,快速定位crash

Bugly符号化iOS 崩溃,快速定位crash

作者: RephontilZhou | 来源:发表于2018-05-05 00:10 被阅读184次

    【原创博文,转载请注明出处!】

    当前iOS游戏App捕获crash接入的SDK是腾讯的bugly ,拦截到崩溃信息之后,往往对那些程序最后时刻的堆栈地址无从下手,想必小伙伴们都看到过类似的玩意儿吧☹️: 崩溃信息.png 一堆地址,怎么知道这个crash的具体信息呢?今天我们借助bugly上传符号表就可以将这些地址映射成具体的类名。
    Bugly iOS 符号表配置官方文档入口:https://bugly.qq.com/docs/user-guide/symbol-configuration-ios/?v=1492997248592

    什么是符号表?

    符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:

    <起始地址> <结束地址> <函数> [<文件名:行号>]

    为什么要配置符号表?

    为了能快速并准确地定位用户APP发生Crash的代码位置,Bugly使用符号表对APP发生Crash的程序堆栈进行解析和还原。

    举一个例子,用对比说话:

    example.jpg

    通过上面的简单说明,我们大致了解到配置iOS符号表可以帮我们高效、准确地定位到引起iOS应用crash的函数堆栈所对应的类名,便于快速地解决问题。但是官方文档提供了几种不同的配置方案,看似很友好,但是不同的方案之间操作并没有讲清楚,很迷惑,照做下去可能踩坑且没有效果。

    本人按照官方教程试了几种方法,强烈不推荐大家使用“配置Xcode编译执行脚本”方案,这样每次编译项目都会运行脚本,速度贼慢。下面将是我推荐的方案(反正你跟着我做就可以了)。

    首先给Mac安装Java运行环境--->http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    Java.png

    打开链接,选择上图中红色圈出部分,下载Mac下的.dmg文件即可。下载完成之后双击便可一键式安装完毕。嗯,苹果安装软件就是这么滴简单。

    ###Question:如何验证Java环境成功安装?
    Steps: 
    ① .打开终端。
    ② .输入  java  -version
    ③.如果成功了就没有这步了。如果没成功,那说明前面下载的Java运行环境有误。
    安装成功了,终端会如下显示--->
    
    java_installed.png

    嗯,上面我们将电脑Java环境配置好了,下面还需要4个步骤才能结束今天的分享。

    1.下载Bugly iOS符号表工具;
    2.找到Bugly中对应UUID的编译后的包的dSYM文件;
    3.使用下载下来的工具生成符号表文件(.zip格式包);
    4.在bugly后台上传符号表文件(.zip格式包)。
    

    一步步行动起来吧。

    解决第①步:下载Bugly iOS符号表工具吧-->Bugly iOS符号表工具

    解决第②步:show in finder->显示包内容->dSYMs文件夹->找到和项目同名的.dSYM文件,即(项目名.app.dSYM)

    找到xcode打包文件,显示包内容.jpg
    找到与项目同名的.app.dSYM文件.jpg
    Tips:可以在桌面新建一个文件夹,将找到的这个xx.app.dSYM文件还有第一步下载的符号表工具包中“buglySymboliOS.jar”文件放到新建的文件夹中,方便后续通过终端生成符号表.zip文件。
    

    解决第③步:

    Rephontil:~ zhouyong$ java -jar /Users/zhouyong/Desktop/Demo/iOS_Bugly研究/target/buglySymboliOS.jar -i /Users/zhouyong/Desktop/Demo/iOS_Bugly研究/HelloCpp-mobile.app.dSYM 
    

    简单说明:上面是我使用终端生成自己项目的符号表.zip文件。

    完整命令是java -jar 第一步下载的符号表工具包中“buglySymboliOS.jar”文件的路径 -i你就是 第二步获取到的xx.app.dSYM文件路径。(Mac环境下直接将对应的文件拖入到终端即可生成路径,非常简单),这样就可以生成我们需要的目标符号表.zip文件了。终端运行成功后的界面如下: 终端成功生成.zip符号表文件.png
    不指定生成的符号表.zip文件路径时,默认生成的文件与我们刚刚指定的xx.app.dSYM文件同一位置,如下所示: 生成的符号表.zip文件.png

    解决第④步:在bugly后台上传符号表文件(.zip格式包) bugly符号表管理.png

    bugly符号表上传.png upload successful.png

    上传成功后直接点击上面“确定”就可以了。后台解析成功后会自动显示的(不放心的话过段时间你再看,如果不是这样算我输😊)

    最后我们通过两张图来对比着看一下今天的劳动成果:

    A:符号化之前函数调用栈地址 符号化之前函数调用栈地址.png
    B:符号化之后内存地址映射成对应类名 符号化之后内存地址转换为对应的类名.png

    上面的例子是在iOS平台C++环境下开发游戏所发生的崩溃,C++层面的崩溃比iOS原生类的崩溃恶心很多,且Xcode对C++的崩溃给出的有用信息很少,借助bugly符号化对提高应用的稳定性很有帮助,相信如果是原生iOS开发,对于定位Objective-C或swift应该更友好。

    相关文章

      网友评论

      本文标题:Bugly符号化iOS 崩溃,快速定位crash

      本文链接:https://www.haomeiwen.com/subject/dbzjrftx.html