Unity 线上错误解析工具的使用

Unity线上错误解析工具的使用

Unity Dashboard或者Firebase Crashlytic上时常会出现一些看不懂的错误Log,目前我们能够解析的有两类错误。

  1. libunity错误(例:libunity.0x73e900)
  2. libil2cpp错误(例:libil2cpp.0x16b3008)

之所以错误后面显示一大堆数字是因为这些数字是符号表地址。如果平台没有拿到你的符号表,它是无法找到对应语句的,所以只能给你直接显示地址。

那么符号表在哪里呢?

以Anrdoid为例,打包的时候我们在Build Setting里面选择Create symbols.zip选项,打出的包的根文件夹同级目录里面就会出现符号表的压缩包。解压后就会看到两个架构对应的符号表so文件。

Unity 线上错误解析工具的使用_第1张图片

之后我们则可以用以下语句来从符号表文件中找到地址对应的语句:

语法
arm-linux-androideabi-addr2line -f -C -e so的地址 错误地址

例子
arm-linux-androideabi-addr2line -f -C -e /Users/zyf/Desktop/symbols/armeabi-v7a/libunity.sym.so 0x2c7698

注意crash log产生的app版本要和符号表对应app版本相同,否则就会得到错误结果。

不过一条条的查效率不高,所以我们可以借助工具来进行批量查找。这一步需要在Untiy中安装Android Logcat插件。这个插件可在Window > Package Manager中安装。

然后通过Window-Analysis-Anrdoid Logcat打开。

进入Tools-Stacktrace Utility即可到达批量解析界面。

Unity 线上错误解析工具的使用_第2张图片

将所有的错误栈信息Log复制到Original中,点击Resolve Stacktraces即可在Resolved里看到解析结果。

如果不好使的话:

Configure Symbol Patths 可以选择符号文件。

Configure Regex-Stacktrace Regex里面可以选择我们匹配错误的正则表达式。

从这里我们也可以看出来这个工具的运行原理了。即从错误栈信息中按着正则表达式提取出库名和符号表地址,然后拿到符号表里去匹配,再把结果显示出来。

你可能感兴趣的:(unity,android)