콘솔 창(Console Window)
Android 디바이스에 MonoDevelop 디버거 연결(Attaching MonoDevelop Debugger To An Android Device)

MonoDevelop

MonoDevelop 은 Unity와 함께 제공되는 통합 개발 환경(IDE)입니다. IDE는 텍스트 에디터의 익숙한 기능에 디버깅 및 기타 프로젝트 관리 작업의 추가 요소를 조합합니다. 텍스트 에디터는 상당히 직관적이기 때문에 여기에서는 다루지 않습니다. 그러나 에디터의 통합과 Unity 디버거에 대해서는 아래에서 설명합니다.

MonoDevelop 설정

MonoDevelop은 Unity에서 기본으로 설치하나 Windows에서는 설치를 제외하는 옵션이 있습니다. 환경 설정에서(메뉴: Unity > Preferences 클릭 후 External Tools 패널을 선택) MonoDevelop이 외부 스크립트 에디터로 설정되도록 체크합니다. 옵션을 활성화시키면 Unity는 MonoDevelop을 실행해 모든 스크립트 파일에 대한 기본 에디터로 사용합니다.

디버거 설정

MonoDevelop의 소스 레벨 디버깅을 활성화하려면(자세한 내용은 아래 참고) 먼저 External Tools 패널의 환경 설정에서 Editor Attaching 옵션을 활성화합니다. 그리고, Unity 프로젝트와 MonoDevelop 프로젝트를 동기화시킵니다(메뉴: Assets > Open C# Project). 또한 _ Development Build_ 와 _ Script Debugging_ 옵션이 빌드 설정에서 타겟 플랫폼에 맞게 제대로 적용됐는지 확인해야 합니다(메뉴: File > Build Settings).

디버깅 세션에 들어가기에 앞서 플레이 버튼 옆의 타겟 리스트에서 디버깅을 원하는 타겟을 고릅니다(Unity Editor, OSX Player 등). 또한 “Attach To Process”를 선택하면 디버깅 가능한 Unity 프로세스의 리스트 전체가 나타납니다.

플레이 버튼과 타겟 리스트
플레이 버튼과 타겟 리스트

이 단계를 완료한 경우 플레이 버튼을 눌러 Unity 스크립트를 디버깅할 준비가 된 것입니다.

소스 레벨(Source Level) 디버깅

현재 열려 있는 소스 파일은 MonoDevelop에서 탭으로 표시되며 스탠다드 텍스트 에디터의 기능으로 편집할 수 있습니다. 에디터 패널 왼쪽에는 회색 브레이크 포인트 바 가 있는데 이 바를 클릭하면 브레이크 포인트 라 불리우는 마커가 코드 행 옆에 추가됩니다.

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

행에 브레이크 포인트를 추가하면 Unity가 플레이 모드 중 해당 행에 도달하기 직전에 스크립트의 실행을 멈추도록 지시합니다. 이처럼 스크립트가 “멈춤상태” 가 되면 디버거를 활용해 스크립트가 정확히 무엇을 하는지 판단할 수 있습니다.

화살표는 브레이크 포인트에서 실행이 멈춘 상태를 보여 줍니다
화살표는 브레이크 포인트에서 실행이 멈춘 상태를 보여 줍니다

실행이 브레이크 포인트에서 멈추면 실행 상태에 대한 정보가 MonoDevelop 창 하단의 탭에 표시됩니다. 여기서 가장 중요한 부분은 Locals 탭일 것입니다.

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

현재 실행 중인 함수의 로컬 변수 값을 보여줍니다(“this” 라는 유사 로컬 변수는 명시적으로 정의하지 않더라도 모든 함수에서 자동으로 가능합니다. 현재의 스크립트 인스턴스에 대한 참조이므로 스크립트에서 정의된 모든 변수는 “this”를 통해 액세스할 수 있습니다). 브레이크 포인트와 Locals 탭을 조합해 활용하면 코드에 print 구문을 더하는 효과를 얻을 수 있습니다. 원하는 시점에 언제라도 변수의 값을 얻을 수 있는 것입니다. 하지만 Locals 탭 안에서도 변수 값을 편집할 수 있습니다. 변수가 잘못 설정된 것을 발견했을 때와 변수가 어떻게 설정되면 문제가 사라지는지 확인하고 싶을 때에 유용합니다.

MonoDevelop에서 유용한 또 다른 기능은 싱글 스테핑 입니다. 브레이크 포인트에서 실행이 일시 중단될 경우 MonoDevelop 창 위쪽에 디버깅 툴 막대를 사용할 수 있습니다.

MonoDevelop의 스테핑 툴
MonoDevelop의 스테핑 툴

버튼 네 개는 Continue, Step Over, Step InStep Out 이며 실행 메뉴의 명령으로도 액세스 가능합니다. Continue 는 다음 브레이크 포인트가 나올 때까지 실행을 다시 시작합니다. Step OverStep In 은 모두 한 번에 코드 한 행을 실행합니다. 차이가 있다면 Step Over 는 행에 있는 모든 함수 호출을 한꺼번에 실행하는 반면 Step In 은 함수를 단계적으로 실행한다는 것입니다. 올바르다고 알려진 함수에서 실수로 Step In 을 사용하기 때문에 Step Over 는 현재 함수를 끝까지 실행한 후 원래 호출된 코드에서 다시 일시 중지합니다.

여기에서 소스 레벨 디버깅 기술에 대해 자세하게 설명하는 것은 적절하지 않지만 해당 주제를 다루는 다양한 교재와 웹 문서가 있습니다. 또, 조금만 경험해봐도 기술이 가진 힘을 알 수 있을 것이며 자주 발생하는 유형의 버그를 추적하는 데 활용할 방법을 파악할 수 있습니다.

콘솔 창(Console Window)
Android 디바이스에 MonoDevelop 디버거 연결(Attaching MonoDevelop Debugger To An Android Device)