bUseMallocProfiler導(dǎo)致自定義uasset(Component)讀取失敗,運(yùn)行時(shí)崩潰
?????最近踩了一個(gè)大坑,突然項(xiàng)目就啟動(dòng)不了。一直以為是其他小伙伴錯(cuò)誤提交了內(nèi)容導(dǎo)致,所以沒(méi)去理睬。這不,又過(guò)了兩周,發(fā)現(xiàn)沒(méi)有其他人報(bào)異常。感覺(jué)就我自己有問(wèn)題,所以今天就著手看看這個(gè)問(wèn)題。下面就是問(wèn)題定位的心理活動(dòng)過(guò)程和結(jié)果
????查Bug就像破案,首先的收集線索。所以就先還原了最近的操作。最近就干了三件事
內(nèi)存分析
Gameplay Ability System
貼圖與材質(zhì)Asset的保存于讀取
報(bào)錯(cuò)信息是什么呢?讀取uasset時(shí),內(nèi)存分配失敗
完全沒(méi)頭緒的情況下,還是用了計(jì)算機(jī)中最經(jīng)典的“插拔法”。
首先,確定是不是項(xiàng)目的問(wèn)題?通過(guò)打開(kāi)和運(yùn)行項(xiàng)目,發(fā)現(xiàn)一切正常
其次,確定是不是引擎問(wèn)題?使用官方下載版本,沒(méi)有出現(xiàn)任何問(wèn)題;使用源碼編譯版本,Crash
試了兩次,就發(fā)現(xiàn)了可能是修改引擎源碼導(dǎo)致的。但還是沒(méi)有頭緒,因?yàn)樵创a修改應(yīng)該都基本注釋掉了,GAS的開(kāi)發(fā)應(yīng)該也不會(huì)影響到引擎。
????那么,還是得回到代碼Crash的地方。 通過(guò)查看堆棧,找到了一些uasset的名字,然后就找同事逐個(gè)去檢查。 并未發(fā)現(xiàn)什么異常。但卻有一些共同點(diǎn),都調(diào)用或者引用了自定義的Component或者其他資產(chǎn)。
????然后,我就Editor的Content中直接打開(kāi)這些被引用的資產(chǎn),確實(shí)如預(yù)期一樣,Crash!問(wèn)題的范圍是鎖定了,但找不到原因。所以又回到事情的原點(diǎn),最近干的三件事。
????內(nèi)存分析改了啥呢?
1.?MallocLeakDetection.h 中 MALLOC_LEAKDETECTION 0 改為1, 來(lái)查看內(nèi)存mallocleak.start,mallocleak.stop,mallocleak.report
2.?Engine\Saved\UnrealBuildTool\BuildConfiguration.xml新加了<bUseMallocProfiler>打開(kāi)之后可以輸入MPROF、MPROF MARK、MPROF STOP來(lái)抓內(nèi)存
最后通過(guò)檢查,確是<bUseMallocProfiler>true</bUseMallocProfiler>導(dǎo)致的,刪掉該配置,重新編譯引擎。OK了。
而且還有一個(gè)現(xiàn)象,在藍(lán)圖中鼠標(biāo)右鍵添加階段,要5s才能彈出。