[Core.Log] Global=VeryVerbose crashes UE on startup

Setting Global=VeryVerbose in DefaultEngine.ini crashes the editor on startup

LoginId:ceae735444d736ff196f61b307ca0a08
EpicAccountId:566a92a4aa71491a84792cbf67d18d12

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000038

UnrealEditor_CoreUObject!UObjectBaseUtility::IsA<UClass>() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Public\UObject\UObjectBaseUtility.h:620]
UnrealEditor_CoreUObject!UStruct::SerializeBin() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:1093]
UnrealEditor_CoreUObject!UObject::SerializeScriptProperties() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:1894]
UnrealEditor_CoreUObject!UObject::SerializeScriptProperties() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:1805]
UnrealEditor_CoreUObject!UObject::CheckDefaultSubobjectsInternal() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:2080]
UnrealEditor_CoreUObject!FObjectInitializer::PostConstructInit() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:4014]
UnrealEditor_CoreUObject!FObjectInitializer::~FObjectInitializer() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:3813]
UnrealEditor_CoreUObject!StaticConstructObject_Internal() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:4455]
UnrealEditor_CoreUObject!CreatePackage() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:1076]
UnrealEditor_CoreUObject!UObjectBase::DeferredRegister() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectBase.cpp:177]
UnrealEditor_CoreUObject!UClass::DeferredRegister() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:4644]
UnrealEditor_CoreUObject!UObjectForceRegistration() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectBase.cpp:557]
UnrealEditor_CoreUObject!UObjectProcessRegistrants() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectBase.cpp:533]
UnrealEditor_CoreUObject!UObjectBaseInit() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectBase.cpp:1046]
UnrealEditor_CoreUObject!StaticUObjectInit() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:5321]
UnrealEditor_CoreUObject!InitUObject() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:5310]
UnrealEditor_CoreUObject!TBaseStaticDelegateInstance<void __cdecl(void),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:777]
UnrealEditor!TMulticastDelegate<void __cdecl(void),FDefaultDelegateUserPolicy>::Broadcast() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl:956]
UnrealEditor!FEngineLoop::AppInit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:6845]
UnrealEditor!FEngineLoop::PreInitPreStartupScreen() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:2884]
UnrealEditor!GuardedMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:136]
UnrealEditor!GuardedMainWrapper() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:118]
UnrealEditor!LaunchWindowsStartup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:258]
UnrealEditor!WinMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:298]
UnrealEditor!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll
3 Likes

I’m getting this too when I run a commandlet with -nolog -stdout -unattended -LogCmds="log global Error, log LogCheckComponents off, log LogClass verbose" as the args.

Did you ever get a solution?

Removing the “log global Error,” from those command line args makes the crash go away. So I second that it’s log Global related, but does not require VeryVerbose specifically.

Kinda sucks, as I want to remove most logging from this invocation, since it’s just noise.

So I came across the same issue and did some digging. Just posting my findings to help others:

The issue stems from the log category “LogCheckSubobjects”. When you set the Global log to all, you’re essentially overriding LogCheckSubobjects to be all too. When you look at UObject::CanCheckDefaultSubObjects(), it checks whether this log is active at Error, and if so will run additional checks on the sub objects. Later these checks then proceed to fail.

So - workarounds:
If you have no source code available
The easiest solution for people who have no code access is to simply set the LogCheckSubobjects log category back AFTER setting log global.

;Setting all logs full verbosity
Global=All
;Reducing LogCheckSubobjects back to Fatal to prevent crashing.
LogCheckSubobjects=Fatal

If you do have source code available
The above solution works, but won’t scale for larger projects. It forces everyone to be aware of the issue which is not ideal. I found the best way to fix the issue in code is to reset the log category in FLogSuppressionImplementation::ProcessConfigAndCommandLine (LogSuppressionInterface.cpp). There you change the code to:

// and then the compiled in defaults are overridden with those
ProcessCmdString(TEXT("LogCheckSubobjects Fatal"), true); //Add this line.
for (TMultiMap<FName, FLogCategoryBase*>::TIterator It(ReverseAssociations); It; ++It)
{
	SetupSuppress(It.Value(), It.Key());
}

This seems a bit of a bandaid however - it means you can’t override LogCheckSubobjects via command line/ini, which can also lead to frustration. The real fix is likely to be preventing to check sub objects only after initialization but I’ll leave that investigation over to Epic :slight_smile:

1 Like