puerts icon indicating copy to clipboard operation
puerts copied to clipboard

[UE] Bug: 使用Unreal_v1.0.5 v8_94以后test与shipping启动崩溃

Open 40kg opened this issue 1 year ago • 4 comments

前置阅读 | Pre-reading

Puer的版本 | Puer Version

Unreal_v1.0.5

UE的版本 | UE Version

5.2.1

发生在哪个平台 | Platform

Android

错误信息 | Error Message

原始崩溃日志如下: [2023.11.10-18.42.41:572][ 0]LogSVGameInstance: USVGameInstance Create JSEnv, Port:8090 [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: === Critical error: === [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: Fatal error: [File:./Runtime/Core/Private/HAL/MallocBinned2.cpp] [Line: 1438] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: FMallocBinned2 Attempt to realloc an unrecognized block 0xb400007da75c0000 canary == 0x0 != 0xe3 [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D95A0C37C libUnreal.so(0x0000000005A0437C)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D999C892C libUnreal.so(0x00000000099C092C)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D999C7814 libUnreal.so(0x00000000099BF814)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D9974FAD4 libUnreal.so(0x0000000009747AD4)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D99750364 libUnreal.so(0x0000000009748364)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D99BB92E0 libUnreal.so(0x0000000009BB12E0)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D99685BFC libUnreal.so(0x000000000967DBFC)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D99685D2C libUnreal.so(0x000000000967DD2C)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D943A189C libUnreal.so(0x000000000439989C)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D9439F94C libUnreal.so(0x000000000439794C)Unknown [] [2023.11.10-18.42.41:586][ 0]LogAndroid: Error: [Callstack] 0x0000007D9439F7C0 libUnreal.so(0x00000000043977C0)Unknown [] [2023.11.10-18.42.41:587][ 0]LogAndroid: Error: [Callstack] 0x0000007D9579A658 libUnreal.so(0x0000000005792658)Unknown [] [2023.11.10-18.42.41:587][ 0]LogAndroid: Error: [Callstack] 0x0000007D9576E058 libUnreal.so(0x0000000005766058)Unknown [] [2023.11.10-18.42.41:587][ 0]LogAndroid: Error: [Callstack] 0x0000007D9576DB6C libUnreal.so(0x0000000005765B6C)Unknown [] [2023.11.10-18.42.41:587][ 0]LogAndroid: Error: [Callstack] 0x0000007D984A57EC libUnreal.so(0x000000000849D7EC)Unknown [] [2023.11.10-18.42.41:587][ 0]LogAndroid: Error: [Callstack] 0x0000007D9398C950 libUnreal.so(0x0000000003984950)Unknown [] [2023.11.10-18.42.41:587][ 0]LogAndroid: Error: [Callstack] 0x0000007D9398AFEC libUnreal.so(0x0000000003982FEC)Unknown [] [2023.11.10-18.42.41:587][ 0]LogAndroid: Error: [Callstack] 0x0000007D939981A8 libUnreal.so(0x00000000039901A8)Unknown [] [2023.11.10-18.42.41:590][ 0]LogAndroid: Error: [Callstack] 0x0000007D939C09A0 libUnreal.so(0x00000000039B89A0)Unknown [] [2023.11.10-18.42.41:590][ 0]LogAndroid: Error: [Callstack] 0x0000007F107BB1DC libc.so(0x00000000000DF1DC)Unknown [] [2023.11.10-18.42.41:590][ 0]LogAndroid: Error: [Callstack] 0x0000007F107672F0 libc.so(0x000000000008B2F0)Unknown [] [2023.11.10-18.42.41:590][ 0]LogAndroid: Error: [2023.11.10-18.42.41:590][ 0]LogAndroid: Error: [2023.11.10-18.42.41:590][ 0]LogAndroid: Error: [2023.11.10-18.42.41:590][ 0]LogAndroid: Error:

====================================================================

堆栈解析后结果如下: C:\Users\Admin\AppData\Local\Android\Sdk\ndk\25.1.8937393\toolchains\llvm\prebuilt\windows-x86_64\bin>llvm-addr2line.exe -e libUnreal.so -s -f -C 0x0000000005A0437C 0x00000000099C092C 0x00000000099BF814 0x0000000009747AD4 0x0000000009748364 0x0000000009BB12E0 0x000000000967DBFC 0x000000000967DD2C 0x000000000439989C 0x000000000439794C 0x00000000043977C0 0x0000000005792658 0x0000000005766058 0x0000000005765B6C 0x000000000849D7EC 0x0000000003984950 0x0000000003982FEC 0x00000000039901A8 0x00000000039B89A0 FMallocBinned2::FPerThreadFreeBlockLists::Get() MallocBinned2.h:411 v8::internal::Log::Log(v8::internal::Logger*, std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >) ustream.cpp:0 v8::internal::Logger::SetUp(v8::internal::Isolate*) ustream.cpp:0 v8::internal::Isolate::Init(v8::internal::SnapshotData*, v8::internal::SnapshotData*, bool) ustream.cpp:0 v8::internal::Isolate::InitWithSnapshot(v8::internal::SnapshotData*, v8::internal::SnapshotData*, bool) ustream.cpp:0 v8::internal::Snapshot::Initialize(v8::internal::Isolate*) ustream.cpp:0 v8::Isolate::Initialize(v8::Isolate*, v8::Isolate::CreateParams const&) ustream.cpp:0 v8::Isolate::New(v8::Isolate::CreateParams const&) ustream.cpp:0 puerts::FJsEnvImpl::FJsEnvImpl(std::__ndk1::shared_ptrpuerts::IJSModuleLoader, std::__ndk1::shared_ptrpuerts::ILogger, int, std::__ndk1::function<void (FString const&)>, FString, void*, void*) JsEnvImpl.cpp:0 TSizedHeapAllocator<32, FMemory>::ForAnyElementType::~ForAnyElementType() ContainerAllocationPolicies.h:525 std::__ndk1::unique_ptr<puerts::FJsEnvImpl, std::__ndk1::default_deletepuerts::FJsEnvImpl >::release() memory:2672 TSizedHeapAllocator<32, FMemory>::ForAnyElementType::~ForAnyElementType() ContainerAllocationPolicies.h:525 SharedPointerInternals::TIntrusiveReferenceController<puerts::FJsEnv, (ESPMode)1>::GetObjectPtr() const SharedPointerInternals.h:374 USVGameInstance::StartGameInstance() SVGameInstance.cpp:93 FCpuProfilerTrace::FEventScope::~FEventScope() CpuProfilerTrace.h:146 FEngineLoop::Init() LaunchEngineLoop.cpp:4821 FLogCategoryBase::IsSuppressed(ELogVerbosity::Type) const LogCategory.h:35 android_main LaunchAndroid.cpp:831 free_saved_state android_native_app_glue.c:39

问题重现 | Bug reproduce

VR项目升级到UE5.2.1之后,将puerts插件升级到Unreal_v1.0.5,使用v8-94版本 https://github.com/Tencent/puerts/releases/download/Unreal_v1.0.5/puerts_v8_94.tgz 打包安卓版本安装到meta quest2以后,test与shipping必现启动崩溃,dev版本可以正常运行 换用v8-84版本就不会出现崩溃的问题

40kg avatar Nov 10 '23 10:11 40kg

看报错像是内存分配不完整重载导致的。 可以通过禁用ue重载new和delete来验证下,如果禁用后不崩了,那就基本上可以断定是这个原因。

chexiongsheng avatar Nov 10 '23 11:11 chexiongsheng

确实禁用UE重载new/delete以后不会崩溃了....... 不过为了使用v8-94去禁用UE重载new/delete不划算 或者当前就保持先用v8-84?车神有什么建议吗

40kg avatar Nov 10 '23 13:11 40kg

在打包要崩溃的平台前,禁用 puerts的debug功能试试,因为我的没有问题,以前遇到这个问题,好像是改的创建JsEnv 处代码,强制用非debug模式创建

terst6 avatar Nov 12 '23 06:11 terst6

首先用v8-84没问题。 如果要用9.4往下看。 我看8.4和9.4的相关逻辑的最大区别就是Log的构造函数的其中一个参数从const char* 改为std::string了。 恰好这里有个最终分析下来string 构造和析构的问题:https://github.com/Tencent/puerts/issues/1274 ,和这issue的分析是十分吻合的:string里头的new 没重载,用系统内存分配器分配了内存,然后临时string参数析构时的delete因为inline声明能被重载,触发了ue的MallocBinned2的检查。 解决办法可以试试那issue里提到的编译保留global symbol。

chexiongsheng avatar Nov 13 '23 06:11 chexiongsheng