[언리얼 엔진] Assert
- ⭐ Game Programming/Unreal Document
- 2021. 9. 22.
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/
반응형