3

unity il2cpp导出时生成符号表排查crash问题

 1 year ago
source link: https://www.zoucz.com/blog/2022/11/30/011a7e40-70ad-11ed-9fa0-5dbc93f9d3ee/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

unity il2cpp导出时生成符号表排查crash问题

作者: 邹成卓 2022-11-30 20:46:26 分类: unity3d

标签: unity3d

评论数:

目前做的项目是基于unity把场景导出为一个lib,view嵌入到android中运行。 我要说话

有一次遇到了个应用crash的问题,看日志是挂在了unity里边。 我要说话

image.png
我要说话

unity项目导出到android平台后,jni层一般会有三个so库,其中 libmain.so、libunity.so 为引擎库,libil2cpp.so 是导出模块在编译业务代码后打包的库。 我要说话

一般情况下,挂在 libil2cpp.so 中的问题都比较好排查。 我要说话

而如上图的,挂在引擎库内部的问题,一个是符号丢失,另一个是问题一般藏的比较深,且无源码不好排查。
源码是需要花钱买的,符号丢失的问题有方案解决,这里记录一下。 我要说话

addr2line工具

首先打开ndk目录下的ndk/${version}/toolchains目录,可以看到各个平台的ndk交叉编译器工具

image.png
进入目标平台目录,然后进入 prebuilt/${指令集版本}/bin 目录,找到 addr2line 工具。
image.png
我要说话

导出带符号的引擎库文件

打开 File → Build Settings, 将 Create Symbols.zip 选项设置为 debugging。

image.png
我要说话

然后导出项目,即可在 unityLibrary/symbols/${指令集}/ 目录下看到带符号的引擎库。 我要说话

image.png
我要说话

查看crash堆栈对应的内容

查看开头错误堆栈的地址信息,运行
我要说话

./aarch64-linux-android-addr2line -f -C -e /your-path-to/libunity.so 0000000000353e80 00000000003541f4 0000000000356480

我要说话

即可看到正确的符号。

image.png
我要说话

虽然没有源码,但是这里已经可以合理猜测,是调用 windowFocusChanged 的时候,释放某个 context 对象导致的 crash。 我要说话

下面在 android 业务代码中再进行排查,比如 activity 是否已经释放,等思路。我要说话

本文链接:https://www.zoucz.com/blog/2022/11/30/011a7e40-70ad-11ed-9fa0-5dbc93f9d3ee/我要说话

☞ 参与评论我要说话


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK