博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity移动应用如何在Bugly上查看崩溃堆栈
阅读量:1983 次
发布时间:2019-04-27

本文共 1623 字,大约阅读时间需要 5 分钟。

文章目录

一、使用Bugly对移动应用进行崩溃监控

Unity项目中接入了腾讯的Bugly,通过Bugly后台,我们可以对移动应用进行异常监控、崩溃分析等。

在这里插入图片描述

Bugly官网:

腾讯 Bugly,是腾讯公司为移动开发者开放的服务之一,面向移动开发者提供专业的 Crash 监控、崩溃分析等质量跟踪服务。Bugly 能帮助移动互联网开发者更及时地发现掌控异常,更全面的了解定位异常,更高效的修复解决异常。

二、崩溃类型

1、Java崩溃

这种情况我们可以比较完整的看到java的调用堆栈,比较好定位问题。

在这里插入图片描述

2、Native崩溃

这种情况的奔溃,如果没有上传符号表,我们看到的堆栈信息就是这样的

在这里插入图片描述
蓝色的部分就是崩溃的地方,没有符号表,我们是看不到具体是哪个文件哪一行异常。

三、Bugly上传符号表解析崩溃堆栈

1、关于符号表

符号定义的本质是:指被分配了存储空间。如果是函数名则指代码所在区;如果是变量名则指其所在的静态数据区。

所有定义的符号的值就是其目标所在的首地址。
符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:
<起始地址> <结束地址> <函数> [<文件名:行号>]

2、上传符号表

根据上面的信息,是在libunity.so中崩溃的,我们需要上传libunity.so的符号表。

这个libunity.soUnity的引擎库,它的符号表在Unity安装目录中,具体位置如下:

在这里插入图片描述
具体哪个,要看具体的平台(比如AndroidiOS)、编译后端(比如il2cppmono)、发布环境(比如DevelopmentRelease)。
在Mac上,符号表的路径是:
/Applications/Unity/PlaybackEngines/AndroidPlayer/Variations/mono/Release/Symbols
/Applications/Unity/PlaybackEngines/AndroidPlayer/Variations/il2cpp/Release/Symbols
在windows上,符号表的路径是:
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Symbols\armeabi-v7a\libunity.sym.so
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\armeabi-v7a\libunity.sym.so

我们将符号表上传到Bugly

在这里插入图片描述
在这里插入图片描述

3、Native崩溃堆栈解析

上传完符号表,我们就能看到清晰的调用堆栈了,如下

在这里插入图片描述

四、通过NDK的addr2line解析崩溃堆栈

我们也可以自己通过NDKaddr2line工具,配合符号表解析崩溃堆栈。

首先,找到NDKaddr2line工具,NDK目录中有个toolchains文件夹,里面有各个CPU平台的工具
在这里插入图片描述
我们搜索一下addr2line.exe,如下,由于我是Android arm架构的,所以使用arm-linux-androideabi-addr2line.exe
在这里插入图片描述
进入arm-linux-androideabi-addr2line.exe所在的目录,将符号表拷贝到当前目录
在这里插入图片描述
假设我们要查00e437cc这个地址的堆栈,通过如下命令行

arm-linux-androideabi-addr2line.exe -f -C -e libunity.sym.so 00e437cc

在这里插入图片描述

可以看到,输出的堆栈信息为

__gnu_cxx::__verbose_terminate_handler()??:?

与上面bugly自动解析的结果一致

在这里插入图片描述

转载地址:http://pxzvf.baihongyu.com/

你可能感兴趣的文章
【大数据开发】Java基础 -总结21-Hashmap和HashTable的区别
查看>>
Exception in thread “main“ java.sql.SQLException错误之一: Column Index out of range, 0 < 1.
查看>>
C3p0连接池连接mysql出现: com.mchange.v2.resourcepool.BasicResourcePool
查看>>
Azkaban体系结构
查看>>
机器学习之重头戏-特征预处理
查看>>
synchronized底层实现及锁的升级、降级
查看>>
PermGen space-永久区内存溢出
查看>>
Maven继承和聚合
查看>>
使用tk.mapper mybatis 插件注意点时对于实体类中某字段不是表中字段,处理方式
查看>>
Apache Kafka:优化部署的 10 种最佳实践
查看>>
Leetcode 35. 搜索插入位置 c#
查看>>
LeetCode62. 不同路径
查看>>
记gdb调试一次报错:Missing separate debuginfos, use: zypper install glibc-32bit-debuginfo-2.22-15.3.x86_64
查看>>
LeetCode242. 有效的字母异位词
查看>>
LeetCode83. 删除排序链表中的重复元素
查看>>
【VMware vSAN 7.0】3.1.2 vSAN 中的闪存缓存设备设计注意事项—我们有软硬件解决方案
查看>>
关于301和302重定向的理解
查看>>
使用java代码和jmeter脚本批量造数
查看>>
[9] JMeter-常用函数的使用
查看>>
[10] JMeter-察看结果树,你知道都有哪些功能吗?
查看>>