콘솔
Android 장치에 MonoDevelop 디버거를 연결하기

MonoDevelop에 관하여

MonoDevelop이란 Unity가 제공하는 통합 개발 환경 (IDE)입니다. IDE는 잘 알려진 텍스트 에디터의 기능 및 디버깅 및 기타 프로젝트 관리 작업 등의 추가 요소를 조합하여 사용할 수 있습니다. 텍스트 에디터에 대해서는 여기서 다루지 않습니다. 그것은 직감적으로 쓸 수 있기 때문입니다. 그러나 에디터의 통합이나 Unity 디버깅 대해서는 아래에서 설명합니다.

MonoDevelop의 사용 준비

MonoDevelop는 Unity에 의해 처음부터 설치됩니다. 그러나 설치 창에 그것을 제외하는 옵션도 있습니다. Preference에서 MonoDevelop가 외부 스크립트 에디터로 설정되어 있는지 확인합시다(메뉴에서 Unity> Preferences를 클릭하여 External Tools 패널을 선택합니다). 이 옵션이 활성화되어 있으면, Unity는 Monodevelop을 시작해 기본 에디터로서 모든 스크립트 파일을 편집하는 데 사용합니다.

디버거의 세팅

MonoDevelop의 소스 레벨에서의 디버깅(자세한 내용은 아래 참조)을 활성화하기 위해 우선 Preference의 External Tools 패널에서 Editor Attaching 옵션이 활성화되어 있는지 확인하십시오. 그리고, Unity 프로젝트와 MonoDevelop의 프로젝트를 동기화시킵시다(메뉴에서 Assets> Sync MonoDevelop Project를 선택하십시오). 또한 Development Build_와 Script Debugging_ 옵션도 대상 플랫폼에 맞게 제대로 적용했는지 확인하십시오 (메뉴에서 File> Build Settings를 선택하십시오). 만약 WebPlayer를 구축한다면, 게다가 브라우저에서의 플레이어에서 컨텍스트 메뉴를 열고 (Windows에서 마우스 오른쪽 클릭, Mac OSX에서 cmd 클릭) Release Channel> Development 설정을 활성화합시다.

WebPlayer에서의 디버깅을 활성화
WebPlayer에서의 디버깅을 활성화

Just before starting a debugging session, select the target you wish to debug from the target list next to the play button (Unity Editor, OSX Player, etc.). You can also select “Attach To Process”, this will show the full list of debuggable Unity processes.

변수의 값을 표시하는 탭
변수의 값을 표시하는 탭

With these steps completed, you are ready to being debugging your Unity scripts by clicking the play button.

소스 레벨에서의 디버깅

방금 연 소스 파일은 MonoDevelop에서 탭으로 표시되며, 그들은 표준 텍스트 에디터처럼 편집할 수 있습니다. 그러나 에디터 패널의 왼쪽에는 회색 _breakpoint bar_도 있습니다. 이 바에서 클릭하면 코드 행 옆에 브레이크 포인트 마커(breakpoint 마커)라는 것이 추가됩니다.

코드의 16번째 줄에 추가된 브레이크 포인트
코드의 16번째 줄에 추가된 브레이크 포인트

브레이크 포인트을 행에 추가하면 플레이 모드 사이에 그 행을 실행하기 직전에 Unity 스크립트의 실행을 일시 중지하도록 지시합니다. 스크립트가 이처럼 ‘정지되었을’ 때, 스크립트가 무엇을 하고 있는지를 정확하게 판단하기 위해 디버거를 사용할 수 있습니다.

화살표는 브레이크 포인트에서 일시 정지를 한 것을 나타내고 있습니다
화살표는 브레이크 포인트에서 일시 정지를 한 것을 나타내고 있습니다

브레이크 포인트에서 일시 정지가 되었을 때, 실행에 대한 정보는 MonoDevelop 창 하단의 탭에 표시됩니다. 아마도 이들 중 가장 중요한 것은 Locals 탭일 것입니다.

변수의 값을 표시하는 탭
변수의 값을 표시하는 탭

이는 최근 실행하는 함수의 로컬 변수의 값을 표시하고 있습니다. (“this”라는 유사 로컬 변수는 명시적으로 선언하지 않아도 어떤 함수에서든지 자동으로 사용 가능합니다 .this는 지금 열려있는 스크립트 인스턴스에 대한 참조이므로 스크립트에서 선언 된 모든 변수는 ’this’를 통해 액세스 할 수 있습니다.) 코드에 print 상태를 기술한 것과 같은 효과를 얻기 위해 Locals 탭과의 조합으로 브레이크 포인트를 사용할 수 있습니다. 즉, 원하는 타이밍에서 변수의 값을 문의할 수 있습니다. 그러나 Locals 탭 안에서도 변수의 값을 편집할 수 있습니다. 이것은 언제 변수가 잘못 설정되었는지를 발견하여, 값이 원래 되어 있어야만 하는 설정이 되었을 때 문제가 사라지는 지 보고 싶을 때 편리합니다.

MonoDevelop보다 편리한 점은 _single stepping_입니다. 브레이크 포인트에서 실행이 정지되었을 때, MonoDevelop 창 위쪽의 작은 디버깅 도구 막대를 사용할 수 있게 됩니다:

MonoDevelop의 stepping 도구
MonoDevelop의 stepping 도구

5개 중 왼쪽 4개의 버튼은 차례로 Continue, Step Over, Sttep In 그리고 Step Out_이라는 이름으로, Run 메뉴의 명령으로도 실행할 수 있습니다 (가장 오른쪽에 있는 버튼은 Detach_에서 디버깅 세션을 끝내고 싶을 때 사용합니다). Continue_는 다음 브레이크 포인트까지 실행을 계속합니다. Step Over_와 Step In_은 모두 현시점의 코드 한 줄을 실행하는 것입니다. 이 둘 사이의 차이는 Step Over_는 그 행의 모든 함수 호출을 한 번에 실행하는 한편, Step In_은 단계적인 함수의 실행을 계속한다는 점입니다. 함수는 Step In_을 우연히 사용하는 것이 일반적인 것부터, 그것이 옳다고 생각합니다. _Step Out_은 현재 함수의 마지막까지 실행을 계속 한 후 원래 호출된 코드에서 다시 일시 중지합니다.

이 이상의 소스 레벨에서의 디버깅 기술에 대한 자세한 소개는 여기서는 부적절하지만, 이 건에 대한 지식을 제공하는 다양한 도서 및 Web에서의 문서가 있습니다. 게다가 조금 경험해보면 기술력과 이러한 기술을 어떻게 사용하여 거의 모든 종류의 버그를 찾을 것인가 하는 감각을 얻는 데에 도움이 될 것입니다.

콘솔
Android 장치에 MonoDevelop 디버거를 연결하기