[언리얼 엔진] Assert

Assert

assert는 코드의 검증 도구이다. 언리얼 엔진에서는 검증을 위한 매크로 시리즈가 제공된다. 메크로를 확인하려면 아래의 파일에서 찾아볼 수 있다

/UE4/Engine/Source/Runtime/Core/Public/Misc/AssertionMacros.h

런타임 어서트 매크로는 다음과 같은 3가지 종류가 있다.

  • 실행 중지 (DO_CHECK)
  • 디버그 빌드에서 실행 중지 (DO_GUARD_SLOW)
  • 실행 중지하지 않고 오류 보고 (DO_CHECK)

check(표현식)

표현식의 결과가 false인 경우 실행을 중지한다. 가장 간단한 형태의 매크로

check(Mesh != nullptr)
check(bInitialized);

checkf(표현식, ...)

check와 동일하지만 표현식의 결과가 false인 경우 추가정보를 출력할 수 있다.

checkf(WasDestroyed, TEXT( "Failed to destroy Actor %s (%s)"), *Actor->GetClass()->GetName(), *Actor->GetActorLabel());

verify(표현식)

DO_CHECK가 켜져있으면 check와 동일하고, DO_CHECK가 꺼져있어도 실행된다. 검증하는데 사용 된다.

verify((Mesh = GetRenderMesh()) != nullptr);

verifyf(표현식, ...)

checkf처럼 실행을 중지하면서 디버그 메시지를 출력한다.

verifyf(Module_libeay32, TEXT("Failed to load DLL %s"), *DLLToLoad);

checkCode(표현식)

중괄호 범위안의 표현식을 실행할수 있다. (checkf의 확장버전같은 느낌)
DO_CHECK가 꺼져 있으면 컴파일에서 제외된다.

checkCode( if( Object->HasAnyFlags( RF_PendingKill ) ) { UE_LOG(LogUObjectGlobals, Fatal, TEXT("Object %s is part of root set though has been marked RF_PendingKill!"), *Object->GetFullName() ); } );

checkNoEntry()

절때 실행될 일 없는 코드 경로에 표시

switch (MyEnum)
{
    case MyEnumValue:
        break;
    default:
        checkNoEntry();
        break;
}

checkNoReentry(), checkNoRecursion()

함수의 재진입을 방지하기 위한 용도

void NoReentry()
{
    checkNoReentry();
}
int32 Recurse(int32 A, int32 B)
{
    checkNoRecursion();
    return Recurse(A - 1, B - 1);
}

unimplemented()

함수내 구현이 없어서 특정 클래스에서 호출이 안되거나 오버라이딩 해야하는 함수를 표시하는데 사용

class FNoImpl
{
    virtual void DoStuff()
    {
        // You must override this
        unimplemented();
    }
};

ensure(표현식)

표현식 검증에 실패하면 콜스택을 생성

if (ensure( InObject != NULL ))
{
    InObject->Modify();
}

ensureMsg(표현식, 메시지)

ensure에 메시지를 추가한 버전

ensureMsg(Node != nullptr, TEXT("Node is invalid"));

ensureMsgf(표현식, 메시지, ...)

checkf나 verifyf처럼 컨텍스트 정보를 포함해서 메시지를 출력할 수 있도록 함

if (ensureMsgf(!bModal, TEXT("Could not create dialog because modal is set to (%d)"), int32(bModal)))
{
    ...
}

참고

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/Assertions/

반응형

댓글

Designed by JB FACTORY