Assert
포스트
취소

Assert

언리얼 Assert 함수

런타임 assert는 기본적으로 DO_CHECK 디파인이 true일 경우 실행 중지, 실행 중지 하지 않고 보고 유형이 있다. DO_GUARD_SLOW일 경우 디버그 빌드에서 실행중지 유형이 있다.

DO_CHECK 계열 매크로(실행 중지)

  • check(표현식) 표현식이 false면 실행 중지. 가장 간단한 형태의 매크로. DO_CHECK = 1일때 실행.
  • verify(표현식) DO_CHECK가 켜져있으면 check와 동일한 역할을 함. DO_CHECK가 꺼져있어도 실행은됨.
  • checkf(표현식, …) 표현식이 true가 아니면 디버깅에 도움이 되는 추가 정보 출력이 되는게 가능.
  • verifyf(표현식, …) verify와 비슷하게동작. 디버그 메시지 출력 가능.
  • checkCode(표현식){…}

    한 번 실행되는 do/while 루프 안에서 표현 식 실행. 자주 쓰이지는 않음. check처럼 DO_CHECK가 0이면 실행되지 않음.

    1
    
      checkCode( if( !IsValidChecked(Object) ) { UE_LOG(LogUObjectGlobals, Fatal, TEXT("Object %s is part of root set though is invalid!"), *Object->GetFullName() ); } );
    
  • checkNoEntry()

    표현식을 받지 않으며, 절대 실행 될 일이 없는 코드 경로를 표시하는데 사용.

    1
    2
    3
    4
    5
    6
    7
    8
    
      switch (MyEnum)
      {
          case MyEnumValue:
              break;
          default:
              checkNoEntry();
              break;
      }
    
  • checkNoReentry()

    호출이 주어진 함수에 재진입하는 것을 방지하기 위해 사용

    1
    2
    3
    4
    
      void NOReentry()
      {
          checkNoReentry();
      }
    
  • checkNoRecursion()

    checkNoReentry와 같은 검사를 한다.

    1
    2
    3
    4
    5
    
      int32 Recurse(int32 a, int32 B)
      {
          checkNoRecursion();
          return Recurse(A - 1, B - 1);
      }
    
  • unimplemented()

    함수에 구현이 없어서 특정 클래스에서 호출하면 안되거나 덮어써야 하는 함수를 표시하는데 사용

    1
    2
    3
    4
    5
    6
    7
    8
    
      class FNoImpl
      {
          virtual void Dostuff()
          {
              // You must override this
              unimplemented();
          }
      }
    

DO_CHECK가 0으로 되어있을 경우 매크로

  • ensure(표현식)

    표현식을 검증하여 실패하면 그 지점까지 이르는 콜스택 생성

    1
    2
    3
    4
    5
    6
    
      {
          if (ensure(Inobject != NULL))
          {
              Inobject->Modify();
          }
      }
    
  • ensureMsg(표현식, 메시지)

    표현식을 검증, 리포트에 메시지를 추가시킨 콜스택을 형성

    1
    
      ensureMsg(Node != nullptr, TEXT("Node is invalid"));
    
  • ensureMsgf(표현식, 메시지, …)

    메시지에 상세정보 포함시킴

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

DO_GUARD_SLOW 계열 매크로

각각 짝지어 있는 DO_CHECK계열의 버전과 동작은 똑같다. Development 혹은 shipping 버전에서는 사용되지 않는다.

  • checkSlow()
  • checkfSlow()
  • verifySlow()
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
바로가기