
언리얼 기초 · 약 3분
에디터 디버깅 심볼로 콜스택 읽기
디버깅 심볼이 제공하는 정보와 설치 비용을 이해하고, 엔진 프레임에서 내 코드로 원인을 좁힙니다.
Wolfgadeok · 업데이트
심볼은 실행 코드에 이름표를 연결한다
디버거에서 함수 이름이나 소스 줄을 따라갈 수 있는 것은 실행 파일만의 정보로 충분하지 않을 수 있다. 디버깅 심볼은 빌드된 코드와 함수·소스 위치 등의 관계를 해석하는 데 사용한다. 게임 코드가 엔진 함수를 거쳐 실패했을 때 엔진 심볼이 있으면 콜스택을 읽는 데 도움이 된다.
심볼이 오류 자체를 수정하거나 게임 실행 성능을 높이는 것은 아니다. 또한 심볼을 설치했다고 최적화된 빌드의 모든 지역 변수가 항상 정확히 보이는 것도 아니다. 현재 실행하는 바이너리와 일치하는 심볼, 디버거 설정, 소스 파일이 함께 맞아야 의미 있는 정보를 얻을 수 있다.
설치 전에 확인할 것
Launcher에서 사용하는 엔진 버전의 설치 옵션을 열고 Editor symbols for debugging 항목을 확인한다. 필요한 용량은 설치 화면에 표시되는 값을 기준으로 판단하며, 과거 문서의 고정 용량을 모든 버전에 적용하지 않는다. 여러 엔진 버전을 함께 설치했다면 프로젝트와 심볼의 버전이 일치하는지도 확인한다.
- 현재 프로젝트가 사용하는 엔진 버전을 확인한다. 다른 버전의 설치 옵션을 수정하지 않도록 주의한다.
- Launcher의 해당 엔진 설치 옵션에서 디버깅 심볼을 찾아 필요한 용량과 남은 디스크 공간을 확인한다.
- 설치 후 IDE로 프로젝트를 디버깅하고, 정상적으로 호출되는 자신의 함수에 중단점을 걸어 연결을 먼저 확인한다.
- 콜스택에서 엔진 함수 이름과 소스 위치를 확인한다. 일치하지 않으면 디버거의 심볼 로드 상태를 조사한다.

콜스택을 읽는 순서
충돌이 발생한 가장 위쪽 함수만 보고 엔진 버그로 결론 내리지 않는다. 잘못된 참조나 범위를 벗어난 값이 내 코드에서 전달되고 나중에 엔진 내부에서 문제가 드러날 수 있다. 마지막으로 정상적인 인자를 확인할 수 있었던 내 코드 지점까지 호출 경로를 거슬러 올라간다.
재현 시점, 대상 객체의 수명, 스레드, 전달된 인자를 함께 기록하면 원인을 좁히기 쉽다. '가끔 종료할 때 충돌한다'보다 '메시를 교체한 뒤 재시작 없이 종료하면 특정 참조 접근에서 실패한다'가 훨씬 좋은 기록이다. 로그에 계정, 개인 경로, 서버 주소가 있으면 공유 전에 정리한다.
용량을 줄일 때의 판단
디스크가 부족하면 심볼의 효용과 사용 빈도를 따져 선택적으로 관리한다. 작업 중인 엔진의 전체 설치 폴더를 임의로 지우거나 여러 버전의 심볼을 섞지 않는다. 장애 분석을 끝냈다면 재현 절차와 필요한 콜스택을 먼저 보존하고 Launcher가 제공하는 설치 옵션을 통해 관리하는 편이 상태를 이해하기 쉽다.