问题描述
在Bugly上统计到的严重崩溃问题发生在AsyncLoading
线程的EventDrivenIndexToObject
函数中,崩溃的原因是由于某个资源在GC(垃圾回收)过程中被异步加载,导致在判断资源可达性时触发了UE_LOG(xxx, Fatal, xxx)
,从而直接终止了游戏进程。
问题分析过程
Step 1: 堆栈分析
- 崩溃时的状态:在加载资源时,
import object
或export object
出现问题,导致执行到Fatal日志。 - 资源类型多样性:通过对比不同崩溃的堆栈,发现崩溃时加载的资源类型多种多样,说明问题并不特定于某个资源。
Step 2: 分析其他线程
- 主线程的GC状态:主线程在进行GC,处于标记阶段,所有UObject被设置为不可达状态。
- 资源可达性判断:在
EventDrivenIndexToObject
函数中