渲染线程内存拷贝崩溃

偶先引擎在安卓平台运行突然崩溃,发生在渲染线程

崩溃堆栈:

​00000000000601ec : ?? ??:0

000000000361b740 : memcpy(void*, void const* pass_object_size0, unsigned long) at C:/Users\xingz7957\AppData\Local\Android\Sdk_UE\ndk\21.4.7075529\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\bits\fortify/string.h:62

00000000035fb48c : FRHICommandListExecutor::ExecuteInner_DoExecute(FRHICommandListBase&) at D:/UE_4.27/UE4.27_Origin/Engine/Source/Runtime/RHI/Private/RHICommandList.cpp:372

00000000035fc1d0 : FRHICommandListExecutor::ExecuteInner(FRHICommandListBase&) at D:/UE_4.27/UE4.27_Origin/Engine/Source/Runtime/RHI/Private/RHICommandList.cpp:657

0000000003a1da6c : FRHICommandListImmediate::ImmediateFlush(EImmediateFlushType::Type) at D:/UE_4.27\UE4.27_Origin\Engine\Source\Runtime\RHI\Public/RHICommandList.inl:114

0000000003bb0634 : RenderViewFamily_RenderThread(FRHICommandListImmediate&, FSceneRenderer*) at D:/UE_4.27/UE4.27_Origin/Engine/Source/Runtime/Renderer/Private/SceneRendering.cpp:3749

0000000003bb0b68 : TEnqueueUniqueRenderCommandType<FRendererModule::BeginRenderingViewFamily(FCanvas*, FSceneViewFamily*)::FDrawSceneCommandName, FRendererModule::BeginRenderingViewFamily(FCanvas*, FSceneViewFamily*)::$_20>::DoTask(ENamedThreads::Type, TRefCountPtr<FGraphEvent> const&) at D:/UE_4.27/UE4.27_Origin/Engine/Source/Runtime/RenderCore/Public/RenderingThread.h:183

0000000002ec6e24 : FBaseGraphTask::Execute(TArray<FBaseGraphTask*, TSizedDefaultAllocator<32> >&, ENamedThreads::Type) at D:/UE_4.27/UE4.27_Origin/Engine/Source/Runtime/Core/Public\Async/TaskGraphInterfaces.h:524

0000000002ec69b8 : FNamedTaskThread::ProcessTasksUntilQuit(int) at D:/UE_4.27/UE4.27_Origin/Engine/Source/Runtime/Core/Private/Async/TaskGraph.cpp:601

0000000003649518 : RenderingThreadMain(FEvent*) at D:/UE_4.27/UE4.27_Origin/Engine/Source/Runtime/RenderCore/Private/RenderingThread.cpp:372

0000000002f14e84 : FRunnableThreadPThread::Run() at D:/UE_4.27/UE4.27_Origin/Engine/Source/Runtime/Core/Private/HAL/PThreadRunnableThread.cpp:25

0000000002ec5574 : FRunnableThreadPThread::_ThreadProc(void*) at D:/UE_4.27/UE4.27_Origin/Engine/Source\Runtime/Core/Private/HAL/PThreadRunnableThread.h:185

00000000000cf584 : ?? ??:0

0000000000068ee4 : ?? ??:0

您好,请问下是在shipping下发生吗?

看了一下代码这里出错只有下面这句和字符串的memcpy有关

TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_STR(NameType::TStr(), RHICommandsChannel);

在shipping下应该不会发生,可能是字符串的内存出了什么问题

如线下沟通,可能是gpu hang导致的,可以尝试添加r.OpenGL.FenceKickPerDrawCount 看是否缓解

是Shipping版本出现的,类似的复现问题堆栈如下:

00000000000601ec : ?? ??:0

0000000003489468 : memcpy(void*, void const* pass_object_size0, unsigned long) at C:/Users\bangyih\AppData\Local\Android\Sdk\ndk\21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\bits\fortify/string.h:62

0000000003469144 : FRHICommandListExecutor::ExecuteInner_DoExecute(FRHICommandListBase&) at D:/E01/UE4/Engine/Source/Runtime/RHI/Private/RHICommandList.cpp:372

0000000003469e88 : FRHICommandListExecutor::ExecuteInner(FRHICommandListBase&) at D:/E01/UE4/Engine/Source/Runtime/RHI/Private/RHICommandList.cpp:657

000000000388b5a8 : FRHICommandListImmediate::ImmediateFlush(EImmediateFlushType::Type) at D:/E01\UE4\Engine\Source\Runtime\RHI\Public/RHICommandList.inl:80

0000000003886968 : UpdateSceneCaptureContentMobile_RenderThread(FRHICommandListImmediate&, FSceneRenderer*, FRenderTarget*, FTexture*, FString const&, FResolveParams const&, bool, FGenerateMipsParams const&, bool) at D:/E01/UE4/Engine/Source/Runtime/Renderer/Private/MobileSceneCaptureRendering.cpp:423

0000000003a17f0c : UpdateSceneCaptureContent_RenderThread(FRHICommandListImmediate&, FSceneRenderer*, FRenderTarget*, FTexture*, FString const&, FResolveParams const&, bool, FGenerateMipsParams const&, bool) at D:/E01/UE4/Engine/Source/Runtime/Renderer/Private/SceneCaptureRendering.cpp:381

0000000003a18644 : operator() at D:/E01/UE4/Engine/Source/Runtime/Renderer/Private/SceneCaptureRendering.cpp:812

0000000002d34c7c : FBaseGraphTask::Execute(TArray<FBaseGraphTask*, TSizedDefaultAllocator<32> >&, ENamedThreads::Type) at D:/E01/UE4/Engine/Source/Runtime/Core/Public\Async/TaskGraphInterfaces.h:524

0000000002d34810 : FNamedTaskThread::ProcessTasksUntilQuit(int) at D:/E01/UE4/Engine/Source/Runtime/Core/Private/Async/TaskGraph.cpp:601

00000000034b71d0 : RenderingThreadMain(FEvent*) at D:/E01/UE4/Engine/Source/Runtime/RenderCore/Private/RenderingThread.cpp:372

0000000002d82c38 : FRunnableThreadPThread::Run() at D:/E01/UE4/Engine/Source/Runtime/Core/Private/HAL/PThreadRunnableThread.cpp:25

0000000002d333cc : FRunnableThreadPThread::_ThreadProc(void*) at D:/E01/UE4/Engine/Source\Runtime/Core/Private/HAL/PThreadRunnableThread.h:185

00000000000cf584 : ?? ??:0

0000000000068ee4 : ?? ??:0

对应日志如下

复现定位到如下方法,Data返回为空

[Image Removed]大概率是opengl的函数返回空,需要确认下有哪些可能导致问题

​ [Image Removed]​