블루프린트 디버깅은 에디터에서 플레이( PIE ) 또는 에디터에서 시뮬레이트( SIE ) 도중 게임의 실행을 일시정지할 수 있도록 하는 강력한 기능입니다. 디버깅 시 중단점 사용을 통해 블루프린트 또는 레벨 블루프린트의 그래프를 살펴볼 수 있습니다.
디버깅 컨트롤
블루프린트 디버거를 사용하여 PIE 및 SIE 세션 도중 게임 실행에 관한 컨트롤을 제공합니다. 컨트롤은 게임이 실행 중일 때 툴바에서 활성화됩니다. 디버깅 중인 블루프린트의 종류와 디버깅 세션의 현재 상태에 따라 다른 디버깅 컨트롤이 표시됩니다. 중단점 에 도달할 때와 같이 필요한 경우에만 일부 컨트롤이 활성화됩니다.

블루프린트 에디터(Blueprint Editor) 창 메뉴에서 열릴 수 있는 디버그(Debug) 탭과 블루프린트 디버거(Blueprint Debugger) 모두에서 PIE 또는 SIE 모드가 활성 상태일 때 컨텍스트에 따라 디버깅 버튼이 표시됩니다.

디버깅 활성화
블루프린트의 디버깅을 활성화하려면 먼저 레벨에서 디버깅할 블루프린트의 인스턴스를 지정해야 합니다.
블루프린트 내부의 디버그 오브젝트(Debug Object) 드롭다운 메뉴를 클릭하고, 디버거에서 보고자 하는 인스턴스를 선택합니다.

오브젝트를 선택하면 돋보기 아이콘을 클릭하여 레벨에서 해당 오브젝트로 바로 갈 수 있습니다.

에디터에서 플레이할 때 블루프린트가 다른 창에 열려 있으면 스크립트 실행 시 'Active Wire' 펄스가 표시될 것입니다.

위의 예시에서 2개의 Input Axis Event가 블루프린트에서 함수를 호출하여 폰의 컨트롤러에 움직임을 추가합니다. 왼쪽 창에서 게임이 시작될 때 스크립트가 실행되는 것을 볼 수 있습니다(펄스 와이어가 빨간색 InputAxis Event 노드에서 나와 Add Controller 입력 노드로 들어감).
중단점
중단점 은 블루프린트 그래프 노드에 배치할 수 있는 마커입니다. 중단점을 가진 노드를 PIE나 SIE 모드 도중 실행하려고 하면 게임이 일시정지되고 개발자는 블루프린트 에디터의 그래프 뷰를 통해 노드 위치로 이동합니다. 이에 따라 변수의 값을 확인하고 블루프린트 내에서 실행 흐름을 살펴볼 수 있습니다. 블루프린트의 모든 중단점은 디버그 탭에 표시되며, 선택하면 블루프린트의 그래프 내에서 볼 수 있습니다. 노드에 중단점을 배치하려면 노드를 우클릭하고 컨텍스트 메뉴에서 중단점 추가(Add Breakpoint) 를 선택합니다. 이때 노드 왼쪽 상단에 빨간색 팔각형이 표시됩니다. 노드를 다시 우클릭하거나 디버그 탭의 중단점 항목을 우클릭하고 중단점 제거(Remove Breakpoint) 명령을 선택하면 중단점을 삭제할 수 있습니다.

이 중단점은 Jump 노드가 실행될 때 게임을 중단시킵니다.
중단점을 제거하지 않고 일시적으로 비활성화하려면 블루프린트 노드를 우클릭하거나 디버그 탭의 중단점 항목으로 이동한 뒤 컨텍스트 메뉴에서 중단점 비활성화(Disable Breakpoint) 를 선택합니다. 중단점을 비활성화하면 빨간색 팔각형에 외곽선이 표시됩니다. 비활성화된 중단점은 실행되지 않지만 손쉽게 다시 활성화할 수 있습니다. 이 프로세스는 중단점을 반복적으로 삭제하고 다시 만드는 것보다 편리하고 작업자 실수가 발생할 가능성이 적습니다.

이 중단점은 비활성화되었고 현재 아무것도 하지 않지만 필요한 경우 손쉽게 다시 활성화할 수 있습니다.
비활성화된 중단점을 활성화하려면 노드를 우클릭 하고 중단점 활성화(Enable Breakpoint) 를 선택하거나 디버그 에서 중단점 옆에 있는 아이콘을 클릭합니다. 디버그 탭에서 중단점을 우클릭 하고 중단점 활성화 를 선택할 수도 있습니다. 중단점은 디버깅 세션을 진행하는 과정을 포함해 언제든지 생성, 비활성화, 활성화 또는 제거될 수 있습니다. 중단점은 프로젝트 .ini 파일에 저장되므로 에디터 세션 간에 유지됩니다.
유효하지 않은 위치에 중단점을 배치하면 노란색으로 나타나고 느낌표가 표시될 수 있습니다. 경우에 따라 블루프린트를 컴파일하면 문제가 해결됩니다. 이외의 경우 중단점 아이콘에 마우스 커서를 두면 설명이 표시됩니다.

이 중단점은 유효하지 않으며 도달하지 않을 것입니다. 경우에 따라 블루프린트를 리컴파일하면 해결될 수 있습니다.
중단점으로 실행을 일시정지하면 에디터에서 노드에 초점이 맞춰지고 강조 표시되며, 커다란 빨간색 화살표가 나타납니다.

중단점에 도달했고, 실행을 일시정지합니다.
감시
감시 는 디버깅 세션 도중 빠른 참조를 위해 블루프린트 노드 핀의 값을 추적합니다. 핀은 핀을 포함한 노드가 가장 최근에 실행되었을 때 계산된 값을 보유합니다. 핀에 감시를 두려면 블루프린트 그래프에서 핀 이름을 우클릭하고 컨텍스트 메뉴에서 이 값 감시(Watch this value) 를 선택합니다. 이미 감시 중인 핀이라면 컨텍스트 메뉴에서 이 값 감시(Watch this value) 대신에 이 값의 감시 중단(Stop watching this value) 으로 대체됩니다.
아직 노드가 실행되지 않은 핀은 디버깅 정보를 이용할 수 없습니다. 이 경우 데이터 값이 아니라 해당 내용을 알려주는 메시지가 표시됩니다. 그 이유는 노드가 기반 코드를 실행할 때에만 핀의 값이 업데이트되기 때문이고, 그에 따라 노드가 최소 한 번 실행될 때까지는 유효하지 않습니다. 블루프린트 변수 노드도 코드를 실행해야 변수 값을 얻을 수 있고, 이 과정은 다른 노드가 해당 변수의 출력 값에 액세스를 시도할 때에만 이루어집니다.
디버그 창과 블루프린트 디버거
디버그 창은 중단점, 감시 및 현재 코드 실행 트레이스 스택을 보여줍니다. 이 창에는 중단점을 사용하는 동안 코드를 중지 및 재개하거나 단계별로 살펴볼 수 있는 실행 컨트롤도 있습니다. 여러 탭을 통해 전체 실행 콜 스택과 중단점, 감시, 특정 블루프린트 인스턴스의 콜 스택 정보를 볼 수 있습니다.
감시창
블루프린트 감시창(Blueprint Watch Window) 은 감시하고자 하는 데이터에 대한 액세스를 제공하여 디버깅 속도를 높입니다. 에디터에서 열며 현재 콜 스택의 일부이기도 한 블루프린트 클래스를 감시할 수 있습니다. 실행이 일시정지되면 현재 데이터가 들어 있는 종합 콜 스택을 볼 수 있습니다. 손쉽게 블루프린트를 오가며 프로퍼티 값과 노드 출력을 확인할 수도 있습니다. 이 뷰에서는 배열, 세트, 맵 및 기타 데이터 구조의 확장을 지원하여 포함된 데이터를 빠르고 편리하게 조사할 수 있습니다. 또한 노드 이름(Node Name) 열의 항목을 클릭하여 블루프린트 클래스의 노드로 이동하거나 오브젝트 이름(Object Name) 열의 항목을 선택하여 특정 인스턴스를 선택할 수 있습니다.
콜 스택
디버깅 세션에 사용할 수 있는 콜 스택(Call Stack) 은 C++ 개발 환경의 일반적인 콜 스택과 비슷한 개념을 가지고 있습니다. 블루프린트 비주얼 스크립팅 함수와 네이티브(C++) 코드 함수 사이의 실행 흐름을 보여줍니다. 현재 실행 중인 블루프린트 비주얼 스크립팅 함수는 스택 맨 위에 표시됩니다.
블루프린트 매크로는 콜 스택에 표시되지 않습니다. 대신 이를 호출한 함수의 일부로 나타납니다.

위의 블루프린트 함수는 특정 클래스의 모든 액터를 가져오고 그 컴포넌트를 비활성화합니다. 중단점은 함수 끝으로 설정되었습니다.
중단점에 도달하면 콜 스택은 상단의 현재 함수부터 시작하여 호출 함수까지 아래로 현재 실행 중인 함수를 나열합니다. 즉, 각 줄의 항목에는 함수의 이름이 쓰여 있고, 바로 아래에는 해당 함수를 호출한 함수가 있습니다. 반복적(자기 호출) 함수의 경우 연속 동일한 함수 이름이 여러 번 나타날 수도 있습니다.

콜 스택은 위에서와 같이 플레이어가 커스텀 함수 'FindActorPressed'를 누르면 삼인칭 캐릭터의 이벤트 그래프에 대한 호출을 보여줍니다. 원래는 액터의 블루프린트 이벤트 그래프에서 호출되었고, 그에 따라 네이티브 코드의 플레이어 입력 컴포넌트에서 호출된 FindActorPressed 액션 매핑 이벤트로 응답하고 있었습니다.

콜 스택을 보거나 숨기려면 블루프린트 디버거 창을 우클릭하고, 드롭다운에서 콜 스택 을 선택합니다.
블루프린트 콜 스택은 C++ 콜 스택에서 조사하기 번거로울 수 있습니다. IDE에서 블루프린트 콜 스택의 스냅샷을 가져오려면 중단점에서 정지될 때 직접 실행 창에서 {,,UnrealEditor-Core}::PrintScriptCallstack()
을 호출합니다. 이는 에디터 빌드에서만 작동합니다.
실행 추적
실행 추적(Execution Trace) 스택은 가장 최근에 실행된 노드 목록을 맨 위에 표시합니다.

이 목록은 디버깅 시 그래프를 단계별로 수행하는 과정에서 업데이트됩니다.