Tencent / UnLua

A feature-rich, easy-learning and highly optimized Lua scripting plugin for UE.
Other
2.24k stars 614 forks source link

基于UE5.2.0和Unlua2.3.6的项目,非PIE模式运行游戏经常遇到Unlua注册蓝图反射类型时因断言错误导致的崩溃,错误日志截图如下: #720

Open AlexMeng1986 opened 2 months ago

AlexMeng1986 commented 2 months ago

屏幕截图 2024-08-11 163056

断言错误直接原因是类FClassRegistry中两个TMap数据成员Classes和Name2Classes缓存的内容出现了不一致,游戏运行过程中执行GC销毁某些UClass会调用UClassRegistry的NotifyUObjectDeleted函数,但该函数并没有因该UClass的销毁而去移除Classes和Name2Classes中对应元素,这就导致Classes和Name2Class缓存了已经析构掉的、数据败坏的UClass,所以当引擎重用上述UClass内存的时候会导致Name2Classes中没有,而Classes中有,就发生了断言错误导致的崩溃。请问应该如何解决该类问题呢?

qqwx1986 commented 2 months ago

这个问题在Release2.3.6 出现很频繁(打包后),但是用git拉最新的master会好些,因为后续有个修改https://github.com/Tencent/UnLua/commit/dd4d7cce98b69b7a83bc01953911a601eeac7970 改了一部分,但是问题好像还是会出现,然后DelegateRegistry也会有类似的问题 image