Assert란 주어진 코드 조각이 가정하는 상황을 검증하는 도구다. 포인터의 NULL 여부를 검증하는 간단한 것에서부터, 특정 함수에 재진입했는지와 같은 복잡한 검증도 가능하다.

 

목차

     

     


     

    Unreal Engine의 Assert란?

     


     

    Assert란?

     

    Assert란 주어진 코드 조각이 가정하는 상황을 검증하는 도구다. 포인터의 NULL 여부를 검증하는 간단한 것에서부터, 특정 함수에 재진입했는지와 같은 복잡한 검증도 가능하다.

     

    특정 빌드 환경설정 하에서는 컴파일시 제외시킬 수 있도록 Macro로 되어 있는데, 퍼포먼스 상의 이유거나 최종 빌드에서는 필요치 않기 때문이다.

     

     


     

    Assert Macro

     

    위치

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

     

    Runtime Assert Macro

    • define 중 하나가 0으로 설정되면, Macro는 비활성화 된다.
    • 실행중지 
      • DO_CHECK def에 의해 compile
    • 디버그 빌드에서 실행중지
      • DO_GAURD_SLOW def에 의해 compile
    • 실행중지하지 않고 오류보고
      • DO_CHECK def에 의해 compile

     

     

    Unreal Engine의 Assert 3종류

     

    Unreal Engine의 Assert 3종류로는 Check, Verify, Ensure가 있다.

     


     

     

    Check

     

    Check(표현식)

    • Assert 결과가 false이면 실행을 중지시킨다.
    • Macro가 빌드에 컴파일되는 경우에만 실행된다.
      • DO_CHECK = 1

     

    check(Mesh != nullptr);
    check(bWasInitialized && "Did you forget to call Init()?");

     


     

    Verify

     

    Verify (표현식)

    • DO_CHECK 가 켜져있으면, 이 Macro는 check() 와 똑같은 역할을 한다. 
      • DO_CHECK = 1
    • DO_CHECK 가 꺼져있어도 실행된다.
      • DO_CHECK = 0
    • 변수 할당이 가정한 대로 되었는지 검증하는 데 사용할 수 있습니다.

     

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

     


     

    Ensure

     

     Ensure (표현식)

    • Verify 표현식과 유사하나 치명적이지 않은 오류에서만 작동한다.
    • 결과값이 false이면 오류(crash reporter)를 뱉지만 계속해서 실행한다.

     

    // This line of code catches a minor error that could happen in the shipping version of the product.
    // The error is minor enough that we can handle it without needing to halt execution.
    // We may think that we've fixed the bug, but still want to know if it ever happens.
    void AMyActor::Tick(float DeltaSeconds)
    {
        Super::Tick(DeltaSeconds);
        // Ensure that bWasInitialized is true before proceeding. If it is false, log that the bug hasn't been fixed yet.
        if (ensureMsgf(bWasInitialized, TEXT("%s ran Tick() with bWasInitialized == false"), *GetActorLabel()))
        {
            // (Do something that requires a properly-initialized AMyActor.)
        }
    }

     

     

     


     

     

    Unreal Engine 공식문서

     

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

     

    어서트

     

    docs.unrealengine.com

     

    https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/Assertions/

     

    Asserts

    Reference to Unreal Engine 4's Assert Functionality

    docs.unrealengine.com