icon안동민 개발노트

블루프린트 디버깅 기초


 블루프린트 디버깅은 게임 로직의 오류를 찾고 수정하는 중요한 과정입니다.

 이 절에서는 언리얼 엔진에서 제공하는 다양한 디버깅 도구와 기법을 살펴보겠습니다.

1. 프린트 스트링을 이용한 기본 디버깅

 가장 간단한 디버깅 방법은 'Print String' 노드를 사용하여 변수 값이나 실행 흐름을 확인하는 것입니다.

[이벤트 노드] --> [변수 또는 계산] --> [Print String]
프린트 스트링 노드 사용 예시

 장점

  • 구현이 간단하고 빠름
  • 실시간으로 값 확인 가능

 단점

  • 많은 정보를 출력하면 화면이 지저분해짐
  • 복잡한 로직에는 적합하지 않음

2. 브레이크포인트 설정

 브레이크포인트를 사용하면 특정 지점에서 실행을 일시 중지하고 상태를 검사할 수 있습니다.

  1. 노드 좌측의 빨간 원을 클릭하여 브레이크포인트 설정
  2. 게임을 실행하고 브레이크포인트에 도달하면 실행이 중지됨
  3. 변수 값 확인 및 단계별 실행 가능
브레이크포인트 설정 및 실행 중지 화면

  : 조건부 브레이크포인트를 사용하여 특정 조건에서만 중지되도록 설정할 수 있습니다.

3. 블루프린트 디버거 사용

 블루프린트 디버거는 실행 중인 블루프린트의 상태를 실시간으로 모니터링할 수 있는 강력한 도구입니다.

  1. 'Debug' 버튼을 클릭하여 디버그 모드로 게임 실행
  2. 블루프린트 에디터에서 'Debug' 탭 선택
  3. 실행 중인 인스턴스 선택 및 변수 값 확인
블루프린트 디버거 인터페이스

 주요 기능

  • 변수 값 실시간 모니터링
  • 콜스택 확인
  • 실행 흐름 추적

4. 워치 포인트 (Watch Points) 활용

 특정 변수의 값이 변경될 때 자동으로 브레이크포인트가 발동되도록 설정할 수 있습니다.

  1. 'My Blueprint' 패널에서 변수 우클릭
  2. 'Add Watch' 선택
  3. 워치 설정 (값 변경 시, 특정 값일 때 등)
워치 포인트 설정 화면

5. 실행 흐름 추적

 블루프린트의 실행 흐름을 시각적으로 추적할 수 있습니다.

  1. 디버그 모드에서 게임 실행
  2. 블루프린트 에디터에서 실행되는 노드가 하이라이트됨
  3. 'Debug' 탭에서 'Trace' 옵션 활성화하여 상세 추적
실행 흐름 추적 예시

일반적인 디버깅 시나리오와 해결 방법

  1. 변수 값이 예상과 다른 경우
  • 워치포인트를 설정하여 값이 변경되는 시점 파악
  • 값을 변경하는 모든 노드 검토
  1. 특정 로직이 실행되지 않는 경우
  • 해당 로직 전후에 프린트 스트링 노드 추가
  • 브레이크포인트를 설정하여 실행 흐름 확인
  1. 퍼포먼스 문제
  • 'Stats' 명령어를 사용하여 성능 데이터 확인
  • 빈번히 호출되는 고비용 노드 식별 및 최적화
Stats 명령어 사용 예시
  1. 런타임 에러
  • 출력 로그 확인
  • 에러 발생 지점에 브레이크포인트 설정
  • Try-Catch 노드를 사용하여 에러 처리

고급 디버깅 기법

  1. 커스텀 디버그 노드 생성
  • 자주 사용하는 디버그 로직을 함수로 만들어 재사용
커스텀 디버그 노드 예시
  1. 시각적 디버깅
  • Draw Debug 노드들을 사용하여 3D 공간에 디버그 정보 표시
  • 예 : 충돌 체크, 경로 표시 등
시각적 디버깅 예시
  1. 리플렉션 시스템 활용
  • 'Get All Variables of Class' 노드를 사용하여 동적으로 변수 정보 추출 및 디버그
리플렉션 시스템을 이용한 디버깅 예시

디버깅 모범 사례

  1. 체계적 접근
  • 문제를 작은 단위로 분할하여 접근
  • 가설을 세우고 검증하는 과정 반복
  1. 로깅 활용
  • 중요한 시점마다 로그 남기기
  • 개발 빌드와 릴리즈 빌드의 로그 수준 구분
  1. 버전 관리 시스템 활용
  • 주기적으로 변경사항 커밋
  • 문제 발생 시 이전 정상 버전과 비교
  1. 동료 리뷰
  • 다른 시각으로 문제를 바라보기
  • 코드 품질 향상 및 지식 공유

 블루프린트 디버깅은 단순히 오류를 찾는 것 이상의 의미를 가집니다. 이는 시스템의 동작을 깊이 이해하고, 최적화할 수 있는 기회를 제공합니다.

 다양한 디버깅 도구와 기법을 익히고 활용함으로써, 보다 안정적이고 효율적인 게임 개발이 가능해집니다.