관리 메뉴

기억을 위한 기록들

[UE-CPP] Assert 매크로들 본문

UnrealEngine/UnrealEngine C++ 관련

[UE-CPP] Assert 매크로들

에드윈H 2023. 1. 24. 11:26
// assert 는 DO_CHECK = 1 일때만 실행

// check 는 false 값이면 실행을 중지
check(Mesh != nullptr);
checkf(MyPtr, TEXT("MyPtr is nullptr")); // false 이면 로그 출력
checkcodeMyPtr, TEXT("MyPtr is nullptr")); // checkf 와 비슷
checkNoEntry(); // 절대 실행될 리 없는 경로 표시
checkNoReentry(); // 호출 완료 전까지 다시 호출되면 안되는 경우 체크
checkNoRecursion(); // checkNoReentry() 와 동일
unimplemented(); // 반드시 재정의해야 하는 가상 함수를 표시하기 위해 사용


// verify 는 DO_CHECK = 1 이 아니어도 실행
verify(Mesh != nullptr); // 이하 다른 method 는 assert 와 유사


// ensure 은 콜스택을 생성한다
ensure(MyPtr != nullptr); // 이 지점까지의 콜스택 생성
ensureMsg(MyPtr, TEXT("log")); // 콜스택 생성 + 로그 출력
ensureMsgf(Success, TEXT("log")); // if 문의 조건문 안에 넣어 사용 가능

 

 

 

check 매크로들은 빌드 Shipping 되면서 check 안에 포함되어 있는 코드들이 빠지고 개발 단계에서만 확인 가능하고, ensure는 패키징 Shipping에서도 포함된다. 그러므로 ensure false가 있다면 패키징 실행에서 crash를 유발할 수 있다.

 

개인적으로도 check를 무결성을 확인하기에 만만하게 사용했다가, 패키징빌드에서 해당 코드가 빠져서 예상치 못한 문제를 발생시켰었다.

 

ex)

check(someActor->Destroy()); //destroy 잘됐나 확인하기 위해 넣었었지만,
//패키징 Shipping 되면서 해당 코드 자체가 없어져서 someActor의 Destroy 자체가 호출이 되질 않았다.


assert는 좀 더 코어 한 단계의 코드에서나, 절대적으로 문제를 확인해야 할 부분에서 ensure를 사용하는 게 좋은 것 같다.

 

출처:

https://koreanfoodie.me/926

 

언리얼 어설트 정리 (assert, verify, ensure)

Assert assert 는 일반적으로 참조하고자 하는 변수가 null 인지 아닌지를 체크하는 용도로 자주 사용된다. 실제 개발을 할 때는 프로젝트명으로 된 헤더파일에 assert 구문을 이용한 커스텀 로그를 만

koreanfoodie.me