🛠 언리얼 엔진/기초

Assertion, Logging

또디기 2025. 3. 24. 19:07

Assertion

언리얼에서 정의한 Assertion 용 매크로는 크게 (1) check, (2) verify, (3) ensure 세 가지가 있다. 또 이것들이 활용하는 형태에 따라 조금 변형된 버전으로 존재한다.

check()

C++의 assert 매크로에 대응된다. 디버그 빌드에서 조건이 false면 에러를 던져 에디터를 꺼버린다. 릴리즈 빌드에선 컴파일러에 의해 제거된다. (보다 구체적으로는, 디버그 빌드에서만 켜지는 DO_CHECK 플래그가 있어야지만 동작한다.)

verify()

기본 동작은 check와 같으나, DO_CHECK 플래그가 꺼져있어도(즉, 릴리즈 빌드에서도) 제거되지 않고 검사는 한다. 다만 반환값을 무시하므로 오류를 뱉지는 않는다.

ensure()

치명적이지 않은 오류에 사용하여, 조건이 false면 언리얼 크래시 리포터에 그 사실을 알리고 경고 문구를 출력하지만 에러를 던지지는 않는다.


Logging

언리얼에선 로그 파일, 출력 로그 창에 로그를 기록하기 위한 UE_LOG 매크로를 제공한다.
가장 기본이 되는 형태는 다음과 같다.

UE_LOG(카테고리, 속성, TEXXT("log contents formatted"), ...);

 

 

매번 모든 인자를 직접 입력하기는 번거로우므로 다음과 같은 매크로를 정의하여 사용하자.

로그 매크로를 정의할 소스 파일의 헤더

// 유저 정의 로그 카테고리 추가
DECLARE_LOG_CATEGORY_EXTERN(MyProjectLog, Log, All);

// 함수명과 줄번호 기록하기
#define LOG_INFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))

#define PRINT_LOG_INFO() UE_LOG(MyProjectLog, Warning, TEXT("%s"), *LOG_INFO)

#define PRINT_LOG(str, ...) UE_LOG(MyProjectLog, Warning, TEXT("%s %s"), *LOG_INFO, *FString::Printf(str, ##__VA_ARGS__))

 

 

로그 매크로를 정의할 소스 파일

DEFINE_LOG_CATEGORY(MyProjectLog);

 

 

이제 다음과 같이 사용한다.

PRINT_LOG(TEXT("Hello, %s"), TEXT("World!"));

'🛠 언리얼 엔진 > 기초' 카테고리의 다른 글

언리얼 오브젝트(UObject)의 이해  (0) 2025.03.24
언리얼 타입  (0) 2025.03.24