UE4垃圾回收处理中,对象在使用它,此时可能导致崩溃,因为GC处理,指向地址非法。
如以下崩溃:
我们使用物体材质SetScalarParameterValue时候,此时GC,可能崩溃(游戏结束跳图、玩家死亡重生、或者对象销毁等情况)。解决方案就是,第一,在游戏结束或者对象销毁函数里处理主动销毁,尽量不交给GC,并且使用材质对象时加上不为空等判断。第二点,材质变量成员加上UPROPERTY修饰,函数加上UFUNCTION修饰,一切走虚幻反射系统,避免垃圾回收问题。
Microsoft (R) Windows Debugger Version 10.0.17134.1 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [D:\WinDbg\LocalSymbols\UE4Minidump.dmp]
User Mini Dump File: Only registers, stack and portions of memory are available
************* Path validation summary **************
Response Time (ms) Location
Deferred SRV*D:\WinDbg\Symbols*http://msdl.microsoft.com/download/symbols
OK D:\WinDbg\LocalSymbols
Symbol search path is: SRV*D:\WinDbg\Symbols*http://msdl.microsoft.com/download/symbols;D:\WinDbg\LocalSymbols
Executable search path is:
Windows 10 Version 16299 MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
16299.431.amd64fre.rs3_release_svc_escrow.180502-1908
Machine Name:
Debug session time: Wed Dec 19 15:36:31.000 2018 (UTC + 8:00)
System Uptime: not available
Process Uptime: 0 days 0:12:02.000
................................................................
................................................................
..........
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(8d0.2ac4): Access violation - code c0000005 (first/second chance not available)
ntdll!NtGetContextThread+0x14:
00007ffa`68031da4 c3 ret
0:002> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
*** WARNING: Unable to verify timestamp for nvwgf2umx.dll
*** ERROR: Module load completed but symbols could not be loaded for nvwgf2umx.dll
*** WARNING: Unable to verify timestamp for PlayerSvc.dll
*** ERROR: Module load completed but symbols could not be loaded for PlayerSvc.dll
KEY_VALUES_STRING: 1
TIMELINE_ANALYSIS: 1
Timeline: !analyze.Start
Name:
Time: 2018-12-19T08:12:17.241Z
Diff: 2146241 mSec
Timeline: Dump.Current
Name:
Time: 2018-12-19T07:36:31.0Z
Diff: 0 mSec
Timeline: Process.Start
Name:
Time: 2018-12-19T07:24:29.0Z
Diff: 722000 mSec
DUMP_CLASS: 2
DUMP_QUALIFIER: 400
CONTEXT: (.ecxr)
rax=000001b5dff99a00 rbx=0000000000000000 rcx=0000000000000000
rdx=0000006f15ecce90 rsi=0000006f15ecd004 rdi=00000000000000a0
rip=00007ff75cc0190e rsp=0000006f15ecce20 rbp=000001b5dff99a00
r8=0000000000000000 r9=0000000000000000 r10=0000006f15ecc5a9
r11=0000006f15ecc030 r12=000001b5dff99a00 r13=000001b5e1908500
r14=0000006f15ecd3c0 r15=0000000000000000
iopl=0 nv up ei pl nz na pe nc
cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010202
ShooterGameClient_Win64_Shipping!GameThread_FindParameterByName [inlined in ShooterGameClient_Win64_Shipping!UMaterialInstance::SetScalarParameterValueInternal+0x1e]:
00007ff7`5cc0190e 48637708 movsxd rsi,dword ptr [rdi+8] ds:00000000`000000a8=????????
Resetting default scope
FAULTING_IP:
ShooterGameClient_Win64_Shipping!UMaterialInstance::SetScalarParameterValueInternal+1e [d:\unrealengine-4.20.3-release\engine\source\runtime\engine\private\materials\materialinstance.cpp @ 3356]
00007ff7`5cc0190e 48637708 movsxd rsi,dword ptr [rdi+8]
EXCEPTION_RECORD: (.exr -1)
ExceptionAddress: 00007ff75cc0190e (ShooterGameClient_Win64_Shipping!GameThread_FindParameterByName)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 0000000000000000
Parameter[1]: 00000000000000a8
Attempt to read from address 00000000000000a8
DEFAULT_BUCKET_ID: NULL_CLASS_PTR_READ
PROCESS_NAME: ShooterGameClient-Win64-Shipping.exe
FOLLOWUP_IP:
ShooterGameClient_Win64_Shipping!UMaterialInstance::SetScalarParameterValueInternal+1e [d:\unrealengine-4.20.3-release\engine\source\runtime\engine\private\materials\materialinstance.cpp @ 3356]
00007ff7`5cc0190e 48637708 movsxd rsi,dword ptr [rdi+8]
READ_ADDRESS: 00000000000000a8
ERROR_CODE: (NTSTATUS) 0xc0000005 -
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 -
EXCEPTION_CODE_STR: c0000005
EXCEPTION_PARAMETER1: 0000000000000000
EXCEPTION_PARAMETER2: 00000000000000a8
WATSON_BKT_PROCSTAMP: 4614489d
WATSON_BKT_PROCVER: 9.18.944.0
PROCESS_VER_PRODUCT: Microsoft? DirectX for Windows?
WATSON_BKT_MODSTAMP: 5c19a2f6
WATSON_BKT_MODOFFSET: 1b0190e
WATSON_BKT_MODVER: 4.20.3.0
BUILD_VERSION_STRING: 16299.431.amd64fre.rs3_release_svc_escrow.180502-1908
MODLIST_WITH_TSCHKSUM_HASH: 30721790b5ed734480a541fce1d26ec39e89b331
MODLIST_SHA1_HASH: 64d60c3ea981d7676edd4926a129666554450d26
DUMP_FLAGS: 0
DUMP_TYPE: 2
ANALYSIS_SESSION_HOST: DESKTOP-36NHVFD
ANALYSIS_SESSION_TIME: 12-19-2018 16:12:17.0241
ANALYSIS_VERSION: 10.0.17134.1 amd64fre
THREAD_ATTRIBUTES:
PROBLEM_CLASSES:
ID: [0n309]
Type: [@ACCESS_VIOLATION]
Class: Addendum
Scope: BUCKET_ID
Name: Omit
Data: Omit
PID: [Unspecified]
TID: [0x2ac4]
Frame: [0] : ShooterGameClient_Win64_Shipping!UMaterialInstance::SetScalarParameterValueInternal
ID: [0n281]
Type: [INVALID_POINTER_READ]
Class: Primary
Scope: BUCKET_ID
Name: Add
Data: Omit
PID: [Unspecified]
TID: [0x2ac4]
Frame: [0] : ShooterGameClient_Win64_Shipping!UMaterialInstance::SetScalarParameterValueInternal
ID: [0n306]
Type: [NULL_CLASS_PTR_READ]
Class: Primary
Scope: DEFAULT_BUCKET_ID (Failure Bucket ID prefix)
BUCKET_ID
Name: Add
Data: Omit
PID: [0x8d0]
TID: [0x2ac4]
Frame: [0] : ShooterGameClient_Win64_Shipping!UMaterialInstance::SetScalarParameterValueInternal
BUGCHECK_STR: APPLICATION_FAULT_NULL_CLASS_PTR_READ_INVALID_POINTER_READ
PRIMARY_PROBLEM_CLASS: APPLICATION_FAULT
IP_ON_HEAP: 000001b5debf1c30
The fault address in not in any loaded module, please check your build's rebase
log at
contain the address if it were loaded.
FRAME_ONE_INVALID: 1
LAST_CONTROL_TRANSFER: from 000001b5debf1c30 to 00007ff75cc0190e
STACK_TEXT:
0000006f`15ecce20 000001b5`debf1c30 : 00000000`00000000 000001b5`97739a00 000001b5`97739a00 3f8256a6`80000000 : ShooterGameClient_Win64_Shipping!UMaterialInstance::SetScalarParameterValueInternal+0x1e
0000006f`15ecce28 00000000`00000000 : 000001b5`97739a00 000001b5`97739a00 3f8256a6`80000000 00000000`00000000 : 0x000001b5`debf1c30
THREAD_SHA1_HASH_MOD_FUNC: 7bf12910bf4fcdb2397d219bc8211dc834fdfb2c
THREAD_SHA1_HASH_MOD_FUNC_OFFSET: e4d7a84163bbdbe34cfacd0ecde8e02cabc0aff4
THREAD_SHA1_HASH_MOD: fcd2103aaadd99cb7c438e2fdac588313b1b6e06
FAULT_INSTR_CODE: 8776348
FAULTING_SOURCE_LINE: d:\unrealengine-4.20.3-release\engine\source\runtime\engine\private\materials\materialinstance.cpp
FAULTING_SOURCE_FILE: d:\unrealengine-4.20.3-release\engine\source\runtime\engine\private\materials\materialinstance.cpp
FAULTING_SOURCE_LINE_NUMBER: 3356
FAULTING_SOURCE_CODE:
188: /** Finds a parameter by name from the game thread. */
189: template
190: ParameterType* GameThread_FindParameterByName(TArray
191: {
> 192: for (int32 ParameterIndex = 0; ParameterIndex < Parameters.Num(); ParameterIndex++)
193: {
194: ParameterType* Parameter = &Parameters[ParameterIndex];
195: if (Parameter->ParameterInfo == ParameterInfo)
196: {
197: return Parameter;
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: ShooterGameClient_Win64_Shipping!UMaterialInstance::SetScalarParameterValueInternal+1e
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: ShooterGameClient_Win64_Shipping
IMAGE_NAME: ShooterGameClient-Win64-Shipping.exe
DEBUG_FLR_IMAGE_TIMESTAMP: 5c19a2f6
STACK_COMMAND: ~2s ; .ecxr ; kb
FAILURE_BUCKET_ID: NULL_CLASS_PTR_READ_c0000005_ShooterGameClient-Win64-Shipping.exe!UMaterialInstance::SetScalarParameterValueInternal
BUCKET_ID: APPLICATION_FAULT_NULL_CLASS_PTR_READ_INVALID_POINTER_READ_ShooterGameClient_Win64_Shipping!UMaterialInstance::SetScalarParameterValueInternal+1e
FAILURE_EXCEPTION_CODE: c0000005
FAILURE_IMAGE_NAME: ShooterGameClient-Win64-Shipping.exe
BUCKET_ID_IMAGE_STR: ShooterGameClient-Win64-Shipping.exe
FAILURE_MODULE_NAME: ShooterGameClient_Win64_Shipping
BUCKET_ID_MODULE_STR: ShooterGameClient_Win64_Shipping
FAILURE_FUNCTION_NAME: UMaterialInstance::SetScalarParameterValueInternal
BUCKET_ID_FUNCTION_STR: UMaterialInstance::SetScalarParameterValueInternal
BUCKET_ID_OFFSET: 1e
BUCKET_ID_MODTIMEDATESTAMP: 5c19a2f6
BUCKET_ID_MODCHECKSUM: aaf2b054
BUCKET_ID_MODVER_STR: 4.20.3.0
BUCKET_ID_PREFIX_STR: APPLICATION_FAULT_NULL_CLASS_PTR_READ_INVALID_POINTER_READ_
FAILURE_PROBLEM_CLASS: APPLICATION_FAULT
FAILURE_SYMBOL_NAME: ShooterGameClient-Win64-Shipping.exe!UMaterialInstance::SetScalarParameterValueInternal
TARGET_TIME: 2018-12-19T07:36:31.000Z
OSBUILD: 16299
OSSERVICEPACK: 431
SERVICEPACK_NUMBER: 0
OS_REVISION: 0
SUITE_MASK: 256
PRODUCT_TYPE: 1
OSPLATFORM_TYPE: x64
OSNAME: Windows 10
OSEDITION: Windows 10 WinNt SingleUserTS
OS_LOCALE:
USER_LCID: 0
OSBUILD_TIMESTAMP: 1995-11-08 03:08:04
BUILDDATESTAMP_STR: 180502-1908
BUILDLAB_STR: rs3_release_svc_escrow
BUILDOSVER_STR: 10.0.16299.431.amd64fre.rs3_release_svc_escrow.180502-1908
ANALYSIS_SESSION_ELAPSED_TIME: 64fc
ANALYSIS_SOURCE: UM
FAILURE_ID_HASH_STRING: um:null_class_ptr_read_c0000005_shootergameclient-win64-shipping.exe!umaterialinstance::setscalarparametervalueinternal
FAILURE_ID_HASH: {ed30bd6e-d571-1ea5-a5e3-60c05e78ea1c}
Followup: MachineOwner
---------