[Unreal/C++] Assert 검증 도구 사용하기
먼저 Assert의 국문과 영문 문서는 조금씩 달리 표현되어 있다.
DO_CHECK가 check와 ensure를 관리한다고 하지만
DO_ENSURE가 정의되어 있는 것으로 봐서 기능이 업데이트 되었을 가능성이 있다.
포인터의 NULL 여부를 검증하거나, 특정 함수에 재진입했는지 같은 검증도 가능하다.
런타임 중 Assert 매크로를 사용하면 3가지의 동작을 얻을 수 있다.
1. 실행 중지
2. 디버그 중 실행 중지
3. 실행을 중지하지 않고 오류만 보고
언리얼 공식 문서에 따르면 정의된 DO_CHECK나 DO_GUARD_SLOW의 상태에 따라 Assert가 실행된다고 한다.
DO_CHECK나 DO_GUARD_SLOW의 정의된 값은 아래 경로에서 찾아볼 수 있다.
\Engine\Source\Runtime\Core\Public\Misc\Build.h
// \Engine\Source\Runtime\Core\Public\Misc\Build.h 파일을 요약
#if UE_BUILD_DEBUG
#define DO_GUARD_SLOW 1
#define DO_CHECK 1
#define DO_ENSURE 1
#elif UE_BUILD_DEVELOPMENT
#define DO_GUARD_SLOW 0
#define DO_CHECK 1
#define DO_ENSURE 1
#elif UE_BUILD_TEST
#define DO_GUARD_SLOW 0
#define DO_CHECK USE_CHECKS_IN_SHIPPING
#define DO_ENSURE USE_ENSURES_IN_SHIPPING
#elif UE_BUILD_SHIPPING
#define DO_GUARD_SLOW 0
#define DO_CHECK USE_CHECKS_IN_SHIPPING
#define DO_ENSURE USE_ENSURES_IN_SHIPPING
#endif
DO_CHECK 가 1일 때만 실행
- check : 결과가 false면 실행 중지
check(Expression);
- verify : 결과가 false면 실행 중지, *DO_CHECK가 꺼져 있어도 실행
verify(Expression);
- checkf : 결과가 false면 실행 중지, 디버깅을 위한 추가 정보 기재 가능
checkf(Expression, FormattedText ....);
- verifyf : 결과가 false면 실행 중지, 디버깅을 위한 추가 정보 기재 가능, *DO_CHECK가 꺼져 있어도 실행
verifyf(Expression, FormattedText ....);
- checkCode : ( 내용 ) 안에 있는 Code들을 체크한다,
checkCode(
if (!IsEverythingOK())
{
UE_LOG(LogUObjectGlobals, Fatal, TEXT("Something is wrong with %s! Terminating."), *GetFullName());
}
);
- checkNoEntry : 절대 실행될 일이 없는 코드 경로를 표시하는 데 사용된다.
실행 될 일 없는 곳에 checkNoEntry()를 넣어 놓는다. Ex) switch() { default : checkNoEntry(); break; }
- checkNoReentry : 재귀 호출을 방지하기 위한 매크로
- checkNoRecursion : checkNoReentry와 같은 기능을 하지만 명확한 이름을 가졌다..
재귀 호출이 일어나면 안되는 곳에 checkNoReentry(); OR checkNoRecursion(); 를 넣어 놓는다.
- unimplemented : 특정 클래스에서 호출하면 안되거나 덮어써야 하는 함수를 표시
// You must override this
unimplemented();
DO_GUARD_SLOW가 1일 때만 실행
이들은 기능은 위와 같지만 검증 과정이 엄격하다. 속도가 느리기 때문에 보통 디버그 빌드에서만 사용한다.
- checkSlow : check와 기능이 같다.
- checkfSlow : checkf와 기능이 같다.
- verifySlow : verify와 기능이 같다.
DO_ENSURE 가 1일 때만 실행
이들은 검증 실패시 실행을 중지시키지 않고, 문제 추적에 도움이 되는 콜스택을 만들어 준다.
- ensure : 표현식 검증 실패 시 지점까지 이르는 콜스택을 생성한다.
if (ensure( InObject != NULL ))
- ensureMsg : 리포트에 메시지를 추가시킨 콜스택을 생성한다. (영문버전에는 없다.)
- ensureMsgf : 리포트에 메시지를 추가시킨 콜스택을 생성한다.
ensureMsg(Node != nullptr, TEXT("Node is invalid"));
- ensureAlways : ensure과 다르게 지속적으로 콜스택을 생성한다.
if (ensureAlways ( InObject != NULL ))
- ensureAlwaysMsgf : ensureMsgf 과 다르게 지속적으로 콜스택과 메시지를 생성한다.
ensureAlwaysMsgf(Node != nullptr, TEXT("Node is invalid"));
'Unreal > Manual' 카테고리의 다른 글
Unreal C++ Timer 사용하기 (0) | 2023.10.28 |
---|---|
Unreal C++ Unreal int32, int64 사용 (0) | 2023.10.28 |
Unreal C++ 느낌표 두개 !! 이중 느낌표? (0) | 2023.10.28 |
Unreal 생성자에게 도움을 주는 ConstructorHelpers (0) | 2023.10.28 |
Unreal C++ 언리얼 에셋 불러오기 (0) | 2023.10.28 |