Game Develop

유용한 디버깅매크로함수 (호출함수명,라인 로그출력) 본문

UnrealEngine5/이것저것

유용한 디버깅매크로함수 (호출함수명,라인 로그출력)

MaxLevel 2022. 9. 22. 02:29

헤더파일에 선언.

 

 

 

1.

#define CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
   -> 사용예시 : UE_LOG(LogTemp, Warning, TEXT("%s"), *CALLINFO); 

   -> LogTemp, Warning은 반복적으로 들어가는 인수이기 때문에 편하게 쓰기위해 2번처럼 더 감싼다.

   -> 출력된 로그. 괄호안의 숫자는 해당 호출문이 적힌 Line. 

   -> Project_TPS_PHBGameModeBase파일의 9번째줄에서 호출됐다는 의미.

2.

#define PRINT_CALLINFO() UE_LOG(TPS, Warning, TEXT("%s"), *CALLINFO) 

   -> 사용예시 : PRINT_CALLINFO();

   -> 1번보다 더 간편해졌으나, 로그에 찍을 임의의 문자열값을 넘기는 게 더 범용성 있기 때문에 최종적으로 3번 사용.

   -> 출력된 로그.

 

3.

DECLARE_LOG_CATEGORY_EXTERN(TPS, Log, All); // 헤더부에 작성.

DEFINE_LOG_CATEGORY(TPS); // 구현부(CPP)에 작성. 로그종류에 TPS라는 로그카테고리를 추가.


#define PRINT_LOG(fmt, ...) UE_LOG(TPS, Warning, TEXT("%s %s"), *CALLINFO, \           // #define에서 줄바꿈할때 \ 이용.
*FString::Printf(fmt, ##__VA_ARGS__))

 

 

사용 예시 :

PRINT_LOG(TEXT("My Log : %s"), TEXT("Write what You Want !!"));

 

 

1번 2번과 달리 맨 앞에 새로 추가한 TPS라는 카테고리로 잘 출력된 걸 확인할 수 있다.

 

스크린에 출력하려할 경우 아래처럼 사용.

GEngine->AddOnScreenDebugMessage(1, 5.f, FColor::Red, FString::Printf(TEXT("direction.x %f"), mDirection.X));

 

여기서 첫번째매개변수값은 key값이다. ImGui같은거 사용해본 사람은 아마 알듯한데, 출력하려는 메시지마다 다르게 값을 줘야한다.

-1값을 넣으면 함수명 그대로 스크린에 계속해서 로그메시지가 추가된다. 키값이 -1일 경우, 이 메시지를 업데이트 또는 새로고칠 필요가 없음을 나타낸다고 한다. 그래서 그냥 쭉쭉 이어서 출력되는듯하다.

양수값을 넣으면 깔끔하게 하나의 메시지만 고정되서 출력된다.

 

아래는 실제 예시캡처.

-1값을 넣었을 경우

밑으로 쭉쭉 출력된다. 

 

 

양수값을 넣었을 경우

 

깔끔하게 한번만 출력된다.

 

좀 더 자세한 내용은

https://unrealcommunity.wiki/logging-lgpidy6i

 

Logging | Unreal Engine Community Wiki

Logging means keeping an ordered record of events, function calls, variable values at a certain time during runtime, etc. This is usually saved in the form of text in a log file.

unrealcommunity.wiki

을 참고하자.