bUseMallocProfiler导致自定义uasset(Component)读取失败,运行时崩溃
最近踩了一个大坑,突然项目就启动不了。一直以为是其他小伙伴错误提交了内容导致,所以没去理睬。这不,又过了两周,发现没有其他人报异常。感觉就我自己有问题,所以今天就着手看看这个问题。下面就是问题定位的心理活动过程和结果
查Bug就像破案,首先的收集线索。所以就先还原了最近的操作。最近就干了三件事
内存分析
Gameplay Ability System
贴图与材质Asset的保存于读取
报错信息是什么呢?读取uasset时,内存分配失败
完全没头绪的情况下,还是用了计算机中最经典的“插拔法”。
首先,确定是不是项目的问题?通过打开和运行项目,发现一切正常
其次,确定是不是引擎问题?使用官方下载版本,没有出现任何问题;使用源码编译版本,Crash
试了两次,就发现了可能是修改引擎源码导致的。但还是没有头绪,因为源码修改应该都基本注释掉了,GAS的开发应该也不会影响到引擎。
那么,还是得回到代码Crash的地方。 通过查看堆栈,找到了一些uasset的名字,然后就找同事逐个去检查。 并未发现什么异常。但却有一些共同点,都调用或者引用了自定义的Component或者其他资产。
然后,我就Editor的Content中直接打开这些被引用的资产,确实如预期一样,Crash!问题的范围是锁定了,但找不到原因。所以又回到事情的原点,最近干的三件事。
内存分析改了啥呢?
1. MallocLeakDetection.h 中 MALLOC_LEAKDETECTION 0 改为1, 来查看内存mallocleak.start,mallocleak.stop,mallocleak.report
2. Engine\Saved\UnrealBuildTool\BuildConfiguration.xml新加了<bUseMallocProfiler>打开之后可以输入MPROF、MPROF MARK、MPROF STOP来抓内存
最后通过检查,确是<bUseMallocProfiler>true</bUseMallocProfiler>导致的,删掉该配置,重新编译引擎。OK了。
而且还有一个现象,在蓝图中鼠标右键添加阶段,要5s才能弹出。