November 29, 2017

디버깅 UFunction::Invoke

저자: Nick Darnell

지난 10월 닉 펜워든(Nick Penwarden)은 에픽게임즈가 포트나이트 배틀 로얄을 작업하면서 언리얼 엔진 4에 적용했던 몇 가지 개선 사항들을 강조해 보여주었습니다..

위 목록에 끼지 못한 요소들 중 한 가지는 제가 배틀 로얄 작업 중에 추가한 작은 디버깅 기능입니다. 제작팀은 블루프린트 기반의 위젯을 많이 사용했기 때문에, 우리는 다음처럼 블루프린트 내에서 실제로 누가 네이티브 콜을 호출하는 것인지 잡아낼 수 없는 콜스택을 자주 보았습니다.

 
[Your C++ Code]
UFunction::Invoke(...)  
UObject::ProcessEvent(...)  
AActor::ProcessEvent(...)  
[Rest of the stack]

저는 포트나이트에서 제게 익숙하지 않은 수많은 코드들로 작업을 했기 때문에, 이런 호출의 출처를 항상 확신할 수는 없었습니다. 그래서 저는 출처를 찾는 작업을 돕기 위해 비주얼 스튜디오(Visual Studio)의 직접 실행 창(Immediate Window)에서 실행해서 현재의 블루프린트/ 스크립팅 콜스택을 출력할 수 있는 C 명령을 추가했습니다.

게임의 에디터 빌드를 실행할 때는

{,,UE4Editor-Core}::PrintScriptCallstack()

명령을, 4.18 이상 버전을 사용하는 모노리식 빌드에서는
::PrintScriptCallstack() 
명령을 사용해주면 됩니다.
770_DebuggingUFunction_Invoke.jpg

이런 콜스택 실시간 스냅샷 기능이 여러분의 언리얼 엔진 프로젝트 4 프로젝트에도 유용하길 바랍니다.