背景

当我们打包app时,可以选择生成对应的符号表,其保存 16 进制函数地址映射信息,通过给定的函数起始地址和偏移量,可以对应函数具体信息以供分析。

所以我们拿到测试给的闪退日志(.crash)时,需要找到打包时对应生成的符号表(.dSYM)作为钥匙解析。具体分为下面几个步骤

  1. dwarfdump --uuid 命令获取 .dSYMuuid
  2. 打开 .crash 文件,在特定位置找到 uuid
  3. 根据 arm 版本比对两者是否一致
  4. Xcode 目录下寻找 symbolicatecrash 工具

    不同版本文件路径不同,具体版本请谷歌。Xcode9路径是/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/

  5. 设置终端环境变量

    export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

  6. 使用 symbolicatecrash 工具解析日志
    symbolicatecrash .crash .dsym > a.out

虽然过程不复杂,但是每次都需要手动执行一次检查与命令,过于繁琐,所以决定用脚本化提高效率。
___

步骤实现

输入Crash日志

#要求输入crash文件路径
inputFile 'Please Input Crash File' 'crash'
crashPath=$filePath

由于需要输入两种不同后缀的文件路径,且都需要检查,因此统一定义一个方法。

#定义全局变量
filePath=
#输入文件路径
inputFile() {
    readSuccess=false
    #首先清空变量值
    filePath=
    while [ $readSuccess = false ]; do 
        echo $1
        #读取到变量中
        read -a filePath
        if [[ ! -e $filePath || ${filePath##*.} != $2 ]]; then
            echo "Input file is not ."$2
        else
            readSuccess=true
        fi
    done
}

版权声明:本文为vanch原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/vanch/p/9755040.html