GetFullName Crash

When I compile my C++ in editor, anytime I’ve added new functions to a class, I get a crash in UOBjectBaseUtility.cpp:
FString UObjectBaseUtility::GetFullName( const UObject* StopOuter/=NULL/ ) const

Hey hyperdr1ve-

I’ll need some additional information in order to determine the cause of the crash.

Which version of the engine are you working in?

What is the error message / callstack from the crash?

Do you get the same crash if you create a class in a new project and compile in the editor?

Also, if you could post the logs from the crash it will help identify what the exact cause is. The files can be found in the project folder inside Saved->Logs.

This is with version 4.6. Here is a [clean project with minimum code required to repro the issue] 1 The problem seems to be related to using FClassFinder in a game mode constructor. Steps:

  1. Unzip project
  2. Right click .uproject and generate visual studio project
  3. Open project in visual studio and run
  4. Uncomment the commented out UFUNCTION line in MyPawn.h and hit compile in editor.
  5. Boom

Hi hyperdr1ve,

Thank you for helping to narrow down the crash. I was able to reproduce it using the project and steps that you provided, and I have entered a report about this issue to have it investigated further (UE-7688).

Tim

Thanks Tim!

Any word on what the cause of this is or whether it is slated for 4.7? I hit this particular issue several dozen times on a bad day (any time I add a new UFUNCTION). I haven’t heard anyone else report the issue and so wonder if I’m doing something odd or if I’m the only person actively developing in C++ using hot reload.

It looks like this particular issue was actually closed out this weekend. If you have built the Engine from source code, this fix was merged into the Master and Promoted branches here, and into the 4.7 branch here. If you are using the Binary version of the Engine, the fix will be available in 4.7.

W had to back this fix out as it was causing more harm than good.

We now provide a workaround to this problem but at this point it’s not sure if it’s going to make it into 4.7 build.

However the workaround is simple enough to implement if you have access to engine source code:

In Class.cpp find:

UObject* TempObjectForVTable = StaticConstructObject(this, GetTransientPackage(), NAME_None, RF_NeedLoad | RF_ClassDefaultObject);

and change it to:

UObject* TempObjectForVTable = StaticConstructObject(this, GetTransientPackage(), NAME_None, RF_NeedLoad | RF_ClassDefaultObject | RF_TagGarbageTemp);

After that you can put code that’s resulting in this crash (basically the entire contents of the constructor) inside of:

if (!HasAnyFlags(RF_TagGarbageTemp))
{
    static ConstructorHelpers::FClassFinder<AMyPawn> PlayerPawnClass(TEXT("/Game/PawnBlueprint"));
    DefaultPawnClass = PlayerPawnClass.Class;
}

We will continue looking for other possible solutions to this problem.

Thanks Robert, you mention causing more harm than good, is there a conversation anywhere where I could learn of the caveats to see if they apply to our code base?