이 글은 PC 버전 TISTORY에 최적화 되어있습니다.
서론
2. Debug.Log 파트에서 다뤘듯이 Debug.Log는 만능 해결사가 아닙니다. 출시될 프로그램이라면 모두 삭제를 하여야하고, 과하게 많은 메시지를 콘솔에 보여줌으로서 디버깅에 방해가 될 수 있습니다. 또한 코드를 변경하기 때문에 이상적인 방법이 아닙니다. 이번 파트에서는 모노디벨롭에서 제공하는 기능들을 네이티브로 유니티에 붙여서 사용하는 굉장히 편리한 방법에 대해서 배워보도록 하겠습니다.
1. 컴파일 오류 & 콘솔2. Debug.Log는 만능 해결사?3. 플래그를 이용한 디버깅4. 시각적 디버깅5. 오류의 기록6. 에디터 디버깅7. 모노디벨롭을 통한 디버깅
중단점 설정과 Watch & Local 창
중단점이라는 것은 유니티 프로그램을 실행했을 때 특별히 설정된 줄에서 중단하여 프로그램의 흐름을 살펴 볼 수 있도록 해줍니다. 이를 설정하는 방법과 디버깅 과정에서 어떻게 쓰이는지 배워보도록 하겠습니다.
이번에는 19번째 줄의 모든 오브젝트의 position을 원점으로 되돌리는 코드에 중단점을 설정하겠습니다. 중단점을 설정할 코드에 커서를 놓고 왼 쪽 회색 사이드 부분에서 오른쪽 마우스를 클릭한 뒤 New Breakpoint를 눌러줍니다. |
그럼 위와 같이 중단점이 설정된 코드 왼쪽에 붉은 원이 생기는 것을 볼 수 있습니다.
유니티 프로그램을 실행하게되면 중단점 코드를 실행할 때 자동으로 모노디벨롭의 창이 켜지며 중단점 코드에 위치한 상태로 정지합니다. 이 상태에서 유효한 오브젝트들의 모든 변수를 마우스를 올려 놓음으로서 확인할 수 있습니다. |
위와 같은 방법은 매 중단점마다 보기에는 귀찮을 수 있습니다. 그러므로 Watch 창이 필요합니다. Watch 창은 add a new watch를 통해 현재 중단점에서 유효한 변수, 식, 다른 클래스또는 오브젝트에 연관된 변수 등 어떤 것이든 추가하여 볼 수 있습니다. |
현재 코드라인이 속한 영역의 지역변수만 보고 싶을 때는 Locals 창을 이용하면 됩니다.
중단점 조건 걸기
위에서 다뤄본 중단점은 확실히 디버깅을 쉽게 해줍니다. 하지만 위와 같은 예제에서 for문이 100번 돈다면 100번의 중단점을 거쳐야 다음 디버깅을 진행할 수 있겠죠, 이 문제를 해결하기 위해 중단점에 조건을 거는 것을 배워보도록 하겠습니다.
계속하기와 단계별 실행
그렇다면 중단점에서 프로그램이 멈추는 중단모드에서 어떻게 다음 코드를 디버깅 할 수 있을까요?
모노디벨롭의 좌측 상단을 보면 재생버튼과 화살표 3개를 볼 수 있습니다. 이것을 통해 디버깅의 흐름 제어를 할 수 있습니다. 기본적으로 재생 버튼을 통해 디버깅을 계속 진행할 수 있습니다. 3개의 화살표는 각각 좌측부터 Step Over, Step Into, Step Out 을 의미하는데, 각각의 의미를 살펴보면 다음과 같습니다. Step Over : 다음 줄에 중단점이 있는 것처럼 다음 줄로 이동해 다시 멈춘 후 검사를 기다립니다. 다음 줄에 함수가 있다면 함수의 각 내용을 실행하지 않고 함수를 건너 뛰고 다음 줄로 넘어갑니다. 외부 함수의 내용은 모두 실행되지만 디버깅에선 건너뛰는 것입니다. Step Into : 함수 안쪽을 디버깅합니다. 함수 안쪽의 첫 번째 줄을 중단점으로 설정해 단계별로 디버깅합니다. Step Out : 함수 바깥으로 빠져나와 함수 다음 줄부터 실행이 재개됩니다. |
Call Stack 창
함수를 디버깅 할 때 이 함수가 실행되었고 어떤 상태인지는 알 수 있지만 이 함수가 어디로부터 실행되었는지는 알 수 가 없습니다. 이는 Call Stack 창을 통해 확인할 수 있습니다. 함수 내부에 중단점이 있는 경우 중단 모드에서 Call Stack 창을 통해 함수의 호출 과정을 볼 수 있죠. 하위로부터 상위로 호출되는 순서입니다.
Immediate 창
Immediate 창을 이용함으로서 현재 단계에서 소스 코드의 일부분을 표현식을 통해 값을 확인하거나 계산할 수 있도록 해줍니다. 이 창은 코드를 테스트해보거나 새로운 시나리오를 예상할 때 유용하게 쓰일 수 있습니다.
참고 사이트
1. PACKTLiB 강좌
'Frontend > Unity' 카테고리의 다른 글
[유니티 디버깅] ④ 시각적 디버깅 (0) | 2016.08.03 |
---|---|
[유니티 디버깅] ③ 플래그를 이용한 디버깅 (0) | 2016.08.03 |
[유니티 디버깅] ② Debug.Log는 만능 해결사? (0) | 2016.08.03 |
[유니티 디버깅] ① 컴파일 오류 & 콘솔 (0) | 2016.08.02 |
[유니티 C# 기초 강의] 11. 클래스와 다형성 (4) | 2016.07.26 |
[유니티 C# 기초 강의] 10. 클래스와 상속 (2) | 2016.07.25 |