[언리얼 엔진] 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