언리얼 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()