GC导致的崩溃处理方案

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: <blank>
    Time: 2018-12-19T08:12:17.241Z
    Diff: 2146241 mSec

Timeline: Dump.Current
    Name: <blank>
    Time: 2018-12-19T07:36:31.0Z
    Diff: 0 mSec

Timeline: Process.Start
    Name: <blank>
    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 - <Unable to get error code text>

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - <Unable to get error code text>

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 <releasedir>\bin\build_logs\timebuild\ntrebase.log for module which may
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 <typename ParameterType>
   190: ParameterType* GameThread_FindParameterByName(TArray<ParameterType>& Parameters, const FMaterialParameterInfo& ParameterInfo)
   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
---------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值