美文网首页iOS学习iOS Developer
iOS 用symbolicatecrash符号化崩溃日志中系统库

iOS 用symbolicatecrash符号化崩溃日志中系统库

作者: 野生塔塔酱 | 来源:发表于2018-04-24 15:00 被阅读76次

    说明

    现在已经有很多第三方平台支持解析crash日志中的系统方法了,比如bugly。但是万一遇到情况特殊或者公司要求,还是走上传崩溃日志到自己的服务器,然后自己去定期解析的话,就需要用到symbolicatecrash这个工具了。

    指令操作均在终端中进行。

    另外,每次打包上架提交审核的时候,把对应的.xcarchive与ipa文件一同拷贝一份,按照版本号保存下来是个好习惯。

    1.前期准备工作

    前期准备工作只需要在第一次尝试解析的时候进行,如果可以成功执行最终的命令行解析日志就不需要重复执行。

    <1>确定Xcode路径

    执行如下指令

    xcode-select --print-path
    

    目的:确保Xcode路径存在。如果路径中有空格的存在,请把空格去掉。比如如果Xcode 的名字是“Xcode 9.2”请修改成“Xcode9.2”或者“Xcode”否则后面你会遇到很多稀奇古怪的错误。

    修改方法:应用程序→Xcode→重命名

    <2>添加Xcode路径

    如果Xcode路径已经存在,或者不需要修改,请跳过这一步。注意如果改过Xcode应用的名字也需要进行这一步操作

    执行如下指令

    sudo xcode-select -s 路径
    

    路径部分直接把Xcode应用内Developer文件夹拖拽进去会自动生成。

    Developer文件夹:应用程序→Xcode→右键,显示包内容→Contents文件夹→Developer

    <3>确定Xcode command line tools是否安装

    执行如下指令

    xcode-select --install
    

    如果输出以下内容说明已经安装,否则根据提示安装即可。

    xcode-select: error: command line tools are already installed, use "Software Update" to install updates
    

    2.解析准备工作

    解析所需文件

    解析崩溃日志需要三个文件
    ①.崩溃日志文件(通常为.crash如果服务器上面是.txt也没关系,直接下下来把尾缀改成.crash就行)
    ②.产生崩溃日志的app包对应的.dSYM符号表(注意符号表和包一定要匹配。否则,堆栈方法会错乱)
    ③.崩溃分析工具symbolicatecrash(Xcode自带)

    .dSYM符号表的获取:Xcode→window→organizer 选择Archives→选择想要解析崩溃日志的App包→右键,show in finder→右键(.xcarchive),显示包内容→dSYMs→xxx.app.dSYM
    如果自己这里没有app打包文件就只有跟打包的同事要。

    symbolicatecrash的获取:应用程序(Applications)→Xcode→右键,显示包内容→Contents→SharedFrameworks→DVTFoundation.framework→Versions→A→Resources→symbolicatecrash

    tips:如果到了DVTFoundation.framework这里打不开下一步了,选择如下浏览方式即可。


    image.png

    3.解析日志

    <1>将上述三个文件放在一个文件夹内

    文件夹名称可以任意起,路径随意但最好不要出现中文。

    image.png

    <2>在终端中进入该文件夹内

    直接拖拽文件夹到路径部分会自动生成

    cd 路径
    

    <3>解析日志

    ./symbolicatecrash ./*.crash ./*.app.dSYM>symbol.crash
    

    这个方法一次只能解析一个日志文件,然后输出一个解析过后的symbol.crash日志文件(会覆盖之前存在的symbol.crash),这个输出的日志文件就是我们可以直接阅读的日志文件。symbol部分可以任意修改成其他名字。

    如果要解析多个日志文件,需要逐一将文件夹内的日志文件替换。或者将所有需要解析的日志文件全部放在文件夹内,但是每次指定需要解析的.crash文件。

    如果出现下面类似的错误,报错无法执行

    Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line xx(数字).
    

    执行指令

    export DEVELOPER_DIR=Xcode Developer文件夹路径
    

    像上面一样把Developer文件夹拖拽到等号后面路径部分就行,然后再执行解析指令就不会报错了。

    <4>查看解析结果

    image.png

    可以看到最下面app部分的方法已经解析出来了(main),但是系统的仍然没有解析。那是因为Xcode中没有这个日志中提到的8.3(12F70)这个固件的系统符号文件,否则这里就会把系统方法的调用堆栈一并解析成可读的格式。而symbolicatecrash解析日志是依赖于Xcode 的,所以我们就要找到日志对应CPU架构下对应版本的系统固件符号文件添加进Xcode。

    <5>给Xcode添加对应固件的符号文件

    ①.下载对应固件符号文件

    这个需要结合崩溃日志的信息来,比如这里日志中提到崩溃发生的固件是8.3(12F70)我们就要去找这个固件的符号文件,找的时候还要注意是否区分了CPU架构。下载地址放在后面

    ②.下载完成后添加进Xcode

    打开Finder:点击菜单前往→前往文件夹→输入
    ~/Library/Developer/Xcode/iOS DeviceSupport→前往

    将下载好的符号文件放入定位到的路径里面。

    image.png

    ③.再次解析日志文件

    image.png

    <6>固件符号文件下载地址

    首先感谢iOS Crash分析必备:符号化系统库方法作者的无私分享。该文章的作者收集了几乎所有固件的符号文件并分享了出来,为了尊重原作者这里就不放下载地址了。大家可以在他的文章当中找到下载地址,以及目前收集了哪些固件符号文件。

    相关文章

      网友评论

        本文标题:iOS 用symbolicatecrash符号化崩溃日志中系统库

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