ndc2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을...

71
넥슨지티 컨텐츠R&D1팀 오영욱 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들 언리얼엔진4 디버깅 101

Upload: -

Post on 21-Jan-2018

1.532 views

Category:

Software


0 download

TRANSCRIPT

Page 1: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

넥슨지티 컨텐츠R&D1팀

오영욱

게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

언리얼엔진4 디버깅 101

Page 2: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

발표자 소개 오영욱 2006~2008 C++ 2008~2009 C++ 2009~2011 Flash ActionScript, Java 2011~2013 LUA, Java, Obj-C 2013 Unity, C# 2014~2015 Obj-C, Javascript 2016 Unreal Engine 4, C++

Page 3: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

목차 1. 이 세션에서 다루는 내용 2. 개인적인 개발 스타일 3. 버그와 만났을 때 4. 버그 탐색 전략 5. 블루프린트 디버깅 트릭 6. Visual C++ 와 함께 하는 C++ 디버깅 트릭 7. UE4의 엔진코드를 살펴보는 방법 8. 기타 팁들 9. 그 외 10.정리

Page 4: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

1. 이 세션에서 다루지 않는 것들 1. 유닛테스트와 테스트 주도 개발 2. 아주 복잡한 버그에 관한 해결책 (멀티쓰레드등의 발생 시점을 특정하지

못하는 버그들) 3. 어셈블리 디버깅 - “NDC2014의 사례로 배우는 디스어셈블리디버깅” 4. 페어프로그래밍을 통한 버그 탐색 5. 모바일 환경에서 디버깅 6. 버그를 만들지 않는 방법 7. 버그가 실제 제품에 딸려가지 않게 하는 방법 8. 곰돌이 인형 디버깅

Page 5: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

1. 이 세션에서 다루는 것들

1. 개발하다 막혔을 때 해결 방법 2. 기초적인 UE4의 디버깅 툴들 사용방법 3. UE4에서 제공하고 있는 로깅 방법 4. Visual Studio로 코드에 브레이크포인트를 걸어 데이터를 살펴보기 5. 소소한 디버깅 트릭

Page 6: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

이 슬라이드는 2017년 4월에 만들어졌으며, 4.15 버전 기준입니다.

Page 7: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

2. (개인적인) 프로그래머의 개발 플로우

Page 8: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

시작

종료

개발할것을 정함

구현

원하는대로 구현되었는가

No

Yes

Page 9: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

구현한다.

동작하는가.

No

설계를 바꿔본다..

Page 10: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
Page 11: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

1. 컴파일이 되지 않는다. 2. 실행하면 죽는다. 3. 뭔가 의도한대로 동작하지 않는다. 4. 왜 안 되는지 모르겠다. 5. 하라는 대로 했는데 되지 않는다. 6. 왜 돌아가는지 모르겠다. 7. 어디서부터 봐야 할지 모르겠다. 8. 되던 것이 갑자기 안되기 시작했다.

이러한 걸 해결하는 것들을 다룹니다.

Page 12: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

3. 버그와 만났을 때

Page 13: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
Page 14: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

우선 당장 떠오르는 방법을 실행해봅니다. 떠오르지 않는다면 즉시 키보드에서 손을 뗍니다. 옆에서 끙끙대고 있으면 키보드에서 손을 떼도록 도와주세요.

Page 15: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

4. 버그 탐색 전략

Page 16: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

1. 키보드에서 손을 떼세요. 2. 에러메시지를 검색한다. (선택) 3. 현재 상황을 검색한다. (Google에서 영어로) 4. 주변에 도움을 청한다. 5. 직접 해결한다.

Page 17: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

에러메시지가 제대로 나오는 경우

컴파일이 되지 않거나. 게임 중간에 오류가 나던가.

Page 18: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

침착하게 에러메시지를 읽습니다. 대부분은 읽는 것만으로 해결됩니다. 가급적 컴파일 혹은 게임 실행시 나오는 경고-Warning 들은 바로바로 해결하세요.

Page 19: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

에러메시지만으로 문제를 특정하지 못하는 경우

종종 발생합니다. UE4는 에러메시지는 그래도 친절한 편.

Page 20: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

에러코드와 에러메시지를 통째로 구글에 넣습니다. 에러코드에는 따옴표를 붙여서 검색어에서 생략되지 않도록 합니다. 우리의 친구 스택오버플로우

Page 21: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

에러가 나지 않는 상황에서 코드를 한줄한줄 넣어보면서 어떤 줄에서 에러가 나는지 탐색하는 것도 방법입니다. (들여쓰기 에러 같은 것은 이렇게라도 잡아야..) 괄호나 세미콜론을 빼먹은 관련된 에러의 경우 엉뚱한 곳을 문제라고 가리킵니다.

Page 22: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

• 에러메시지가 나오는 경우를 재현할 방법을 만들어야 합니다. • 디버깅을 할 때는 문제가 있는 상황에

빠르고 쉽게 접근할 수 있도록 합니다.

Page 23: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

에러메세지는 없고 왜 돌아가는 않는지는 모르겠다.

Page 24: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

해당 상황에 대해 검색을 합니다. (지구상의 누군가가 이미 같은 문제를 겪었을 확률이 높습니다.) 자신이 겪는 문제를 가능하면 영어로 만들어서 검색하세요. 처음엔 키워드 만으로 충분합니다. 많이 해봐야 늡니다. 문법이 맞지 않아도 구글이 알아서 고쳐서 검색해줍니다. EX) 브레이크포인트가 동작을 하지 않아요. – breakpoint not working

Page 25: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

해결책을 찾지 못했다면 직접 찾아야 합니다.

Page 26: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

디버깅의 80%는 문제를 정확하게 찾아내는 것

Page 27: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

1. 가설을 세운다. 2. 로그를 찍거나 브레이크포인트로 문제를 확인한다. 3. 문제가 일어나는 원인을 특정한다. 4. 문제가 일어나는 원인이 정확하게 탐색되었다면 해결 방법을 찾는다. 5. 문제가 일어나는 원인이 밝혀지지 않았다면 1번으로 돌아간다.

Page 28: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

언리얼 엔진 디버깅 특징

1. 강력한 블루프린트 2. 친절하게 한국어로 번역된 공식 문서들 3. 오픈 소스라 엔진 소스에 직접 접근 가능 4. 엔진에서 제공하는 강력한 기능들 5. 친절한 소스코드와 로그 메시지들

Page 29: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

언리얼 엔진 디버깅 특징

1. 되는 것만 됨. 안되는 것은 되지 않는다. 2. 업데이트 되고 있지 않는 문서들 3. 엔진 코드에서 문제가 생기면 해결하기 어려움 4. 어디 있는지 알려주지는 않는 강력한 기능들

Page 30: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

5. 블루프린트 디버깅 트릭

Page 31: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

블루프린트 에서 로그 찍기

Page 32: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

Print 함수에서 제공하는 추가기능

• 컬러는 눈에 띄게 • Default 2초는 좀 짧으니 길게

늘리는게 좋습니다.

Page 33: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

Append를 적극 활용 • Append로 여러 변수를 한번에

출력하는 편이 가독성이 좋습니다. (tick 등에서 활용)

• 핀 추가로 적극적으로 문장을 만듭니다. (핀변경은 지원안함)

Page 34: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

Print Text와 Format Text

{} 로 인자를 만들수 있음

Page 35: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

쓸만한 출력 로그 윈도우 (창->개발자툴->출력 로그)

• 중요한건 알아서 노란색으로 표시해줍니다.

• 필터로 필요한것만 볼수 있습니다. • 로그에 키워드를 넣어 필요한것만

검색할수 있습니다.

Page 36: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

블루 프린트 중단점 걸기

Page 37: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

블루 프린트 중단점 걸기

Page 38: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

블루 프린트 값 보기 • 감시를 해야만 값 확인 가능

Page 39: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

블루 프린트 값 보기 디버깅 창은 매우 강력하니 여는걸 잊지 맙시다. (창->디버그) 사용하지 않는 값은 디버그 데이터에 뜨지 않음.

Page 40: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

에디터에서 플레이 할 때 실시간으로 블루프린트 그래프 보기

Page 41: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

6. UE4 Visual C++ 디버깅 트릭

Page 42: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

Visual Studio 에서 중단점 걸기

Page 43: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

Visual Studio 에서 실행중인 어플리케이션에 연결하기

디버그 -> 프로세스에 연결 (Ctrl + Alt + P)

Page 44: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

줄 번호 표시는 옵션->텍스트편집기->언어별(C/C++)에서 줄번호 활성화

Page 45: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
Page 46: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

강력한 덤프를 활용하기 /Saved/Logs 에 가면 지난 로그와 덤프파일들이 모여있습니다. dmp 파일을 더블클릭해서 visual studio에 연결한 후 visual studio로 실행하면!

Page 47: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

강력한 덤프를 활용하기 코드 위치 크래시 당시 메모리 확인 가능

Page 48: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

강력한 덤프를 활용하기

다른 컴퓨터에서 크래시가 발생했다면 dmp 파일 확보. 해당 빌드의 pdb 파일 확보. – Binaries\Win64 폴더. pdb 파일 위치 지정은 도구->옵션->디버깅->기호(symbol) (덤프파일 여는 창에서도 지정할수 있음)

Page 50: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

Cpp 에서 로그 찍기

AddOnScreenDebugMessage 함수 사용 GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, TEXT("BlahBlahBlah"));

#include "Engine.h" 잊지 마세요.

Page 51: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

7. 엔진코드를 살펴보기

Page 52: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
Page 53: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

• 내려받는 법이 따로 있음. • 깃헙 계정과 언리얼 계정이 둘다 필요하며 연동해야만 합니다. • 연동 후엔 받아서 직접 빌드 할 수 있습니다. • 빌드엔 시간이 상당히 걸리며 기존 엔진 버전과는 호환이 되지 않음.

Page 54: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

에디터를 실행하고, 자신의 프로젝트 폴더에 있는 .uproject 파일을 우클릭하면 엔진 버전 교체 가능

Page 55: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

8. 기타 팁들

Page 56: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

에디터에서는 테스트하기 힘든 문제들의 테스트 환경 구축

• 플레이에서 독립형 게임으로 실행함 • 고급세팅 – 에디터 개인설정의 레벨에디터 – 플레이에서는 독립형게임(stand alone play)

에서 추가 파라미터를 넣을수 있음. –log 를 넣어 로그 창을 여는 것을 권함. • Batch 파일(.bat)을 만들어서 에디터에서 바로 맵을 실행할수 있음. • 게임과 마찬가지로 서버, 리슨서버, 클라이언트, 시작 map 파일 설정을 할수 있음. • "_ue4_folder_\UE4Editor.exe " _projectname_.uproject" _map_.umap -log

Page 57: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

다른 사람들이 만든 코드들을 검색할 때 • 특히 로그 나오는 것 어디서 찍는지 볼 때

Page 58: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

종종 겪는 문제들

Page 59: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

블루프린트 무한루프

Page 60: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

블루프린트 무한루프

Page 61: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

블루프린트 무한루프

1000000 정도 루프가 되면 알아서 멈추긴 함 알아서 멈추면 메시지 로그에서 위치를 표시해줌 출력로그에서 죽었다고도 알려줌

Page 62: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

부모 함수 호출 생략

상속받은 클래스일 경우 필요 우클릭해서 추가할수 있음

Page 63: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

If 문에서 괄호 없이 작업하다 기능추가할 때

Page 64: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

9. 그 외

Page 65: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

1. 소스코드를 업데이트 할 때는 에디터는 꼭 꺼라. 2. 파일을 못 쓰겠다고 한다면 일단 게임, 에디터부터 끄자. 3. 가끔 Visual Studio의 컴파일 결과가 엔진에 반영 안될 때도 있다. 4. 소스 꼬였을 때는 침착하게 Git 커맨드라인으로..

Page 66: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

1. 귀찮다는 생각이 들었다면 가급적 바로 해결 2. 항상 측정하고 결과를 확인하는 습관을 들일 것. 3. 빠르게 반복할 수 있는 환경을 만들 것. 4. 동료들을 믿어라.

Page 67: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

NDC의 디버깅 관련 세션들 NDC2016 마이크로토크-안드로이드 게임 해킹 실제 사례와 실전 디버깅 NDC2014 사례로 배우는 디스어셈블리 디버깅 NDC2012 덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2010 온라인 게임에서 사례로 살펴보는 디버깅

Page 68: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

10. 정리

Page 69: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

1. 에러메세지를 읽자 2. 검색을 잘 하자 3. 로그를 잘 남기자 4. 테스트에 친화적인 환경을 구축하자

1.반복하는 시간을 단축하기 위해 배치파일등을 활용 2.디버그에 사용할 키 이벤트 등을 준비해서 재현을 바로바로 할 수 있도록 함

5. 혼자 붙들고 죽지 말자

이현승님의 NDC 2016 – 프로그래머를 괴롭히는 Unreal Engine 4의 함정들을 같이 보세요. http://ndcreplay.nexon.com/NDC2016/sessions/NDC2016_0069.html

Page 70: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

사용된 이미지들 알라딘 굿즈 마션 첫문장 머그컵 Don’t Panic Outer Space The Hitchhikers Guide To The Galaxy https://www.walldevil.com/9334-don39t-panic-outer-space-the-hitchhikers-guide-to-galaxy.html 언리얼 엔진 4의 디버깅 관련 공식 문서 블루프린트 디버깅 : https://docs.unrealengine.com/latest/KOR/Engine/Blueprints/UserGuide/Debugging/index.html PPT 작성에 도움을 주신 김주석님과 황선하님께 감사드립니다.

Page 71: NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

감사합니다.