본문 바로가기

개발/App Developer

디버깅과 코드 분석

Xcode 4 는 웍스페이스 윈도우에서 코드를 분석하고 디버깅하는데 필요한 모든 기능을 제공한다. 이 강좌는 Xcode 4 와 Xcode 3 사이의 차이점에 초점을 맞추어 기능을 살펴볼 것이다.

Scheme 편집기에서 디버거 선택

Xcode 4 는 GDB 와 LLDB 디버거를 사용한다. 사용할 것을 하나 선택하려면 그림 3-3 의 Scheme 팝업 메뉴에서 Edit Active Scheme 를 선택하고, 왼쪽 탭에서 Launch 를 선택해야 한다. Info 팬에서는 Debugger 팝업 메뉴에서 사용하기를 원하는 디버거를 선택해야 한다. 그림 5-1 은 scheme 편집기에서 Launch Info 팬을 여는 것을 보여준다.

그림 5-1  scheme 편집기에서 디버거 선택

LLDB 는 LLVM 오른 소스 컴파일러 프로젝트의 한 부분인 디버거이다. http://llvm.org/ 에서 LLVM 홈페이지를 참고해라. LLDB 디버거는 Xcode 4 에서 우선적으로 선택되는 디버거이다. 약간의 예외만 빼면 디버깅 사용자 인터페이스는 두 디버거가 동일하다.

빌드 전 잠재적인 문제 발견용 Static 분석

버그 발견을 위해서 코드의 문법을 조사하기 위해서 static 분석을 사용해라. Xcode 4 의 static 분석기는 Xcode 3 의 분석기와 동일하다. Xcode 3 가 분석 결과를 표시하기 위해서 따로 분리된 빌드 결과 윈도우를 열었던 반면에, Xcode 4 는 분석을 수행하고, 결과를 조사하고, 소스 코드를 편집하는 모든 동작을 웍스페이스 윈도우에서 제공한다.

static 분석기를 실행하려면, 프로젝트 내비게이터에서 분석할 프로젝트를 선택하고, Product > Analyze “<프로젝트명>” 를 선택해라. 옵션을 설정을 위해 Scheme 편집기를 열고 싶다면, Option 을 누르고 Product > Edit 와 Analyze “<프로젝트명>” 을 선택해야 한다. 분석을 마치면, 발견된 문제 목록을 갖는 결과 내비게이터가 자동으로 열린다. 파일을 열기 위해서 결과 내비게이터에서 결과 하나를 클릭할 수 있다. 발견된 문제는 화살표를 갖는 파란색 사각형에 내용이 표시된다. 그림 5-2 처럼 분석기에 의해 발견된 잘못된 논리적 흐름을 보려면 파란색 사각형을 클릭해야 한다.

그림 5-2  static 분석 결과

그림 5-2 에서 볼 수 있듯이, 분석 결과 바는 내비게이션 바 아래에 위치한다. 발견된 다양한 문제를 보기 위해서 왼쪽의 분석 팝업 메뉴를 열 수 있다. 또는 분석 결과바의 오른쪽 끝의 화살표를 클릭하여 차례대로 사이클을 돌 수도 있다. 내비게이션 바의 오른쪽 끝의 issue 버튼을 클릭하여 발견된 문제가 있는 파일들을 보여주는 issue 팝업 메뉴를 열 수 있으며, issue 버튼이 있는 위치의 화살표 키를 클릭하여 issue 들을 차례대로 사이클을 돌 수 있다. issue 버튼은 경로를 나타내는 노란색 삼각형과 에러를 목록을 나타내는 빨간색 팔각형으로 표시된다.

분석 팝업 메뉴

에러 목록

issue 목록

빌드 에러 이동용 issue  내비게이터와 issue 팝업 메뉴

활성 scheme 에 의해서 명시된 실행 파일을 빌드하고 실행하려면, 툴바 왼쪽 끝에 있는 Run 버튼을 클릭하도록 한다. 빌드 없이 실행이나 실행 없이 빌드와 같은 다른 옵션은 Product 메뉴에서 가능하다. 빌드나 실행전에 scheme 편집기를 여는 동작을 포함한 더많은 옵션을 보려면, Product 메뉴를 열어서 Option 을 선택해야 한다. scheme 은 "활성화 Target, 빌드 환경, 실행 파일 정보 대신 scheme 선택"편에서 설명되었다. scheme 편집기에 대한 정보는 "scheme 편집기의 실행 파일 정보 사용자 정의"편을 참고해라.

컴파일러가 빌드하는 동안 문제를 찾았다면, issue 내비게이터가 열린다. 소스 편집기에서 문제가 발견된 줄을 표시하기 위해서는 에러나 경고 목록에서 하나를 선택하면 된다. 그림 5-3 과 같이 형식이나 파일로 문제를 표시할 수도 있다.

그림 5-3  issue 내비게이터

빌드 issue 를 통한 탐색을 하기 위해서 issue 메뉴를 사용할 수 있다. 예를 들면, 그림 5-4 처럼 소스 편집기의 크기를 최대화화여 닫혀진 내비게이터 팬을 가지는 경우에 유용하다.

그림 5-4  issue 메뉴

빌드 결과를 보기 위한 로그 내비게이터

Xcode 4 에서 로그 내비게이터는 Xcode 3 빌드 로그 윈도우가 바뀐 것이다. 빌드 로그에서 빌드 결과 중 하나를 선택했을 때, 결과들이 그림 5-5 와 같이 펹비기 영역에 표시된다. 해당 에러나 경고가 있는 위치로 소스 편집기를 열려면 경고나 에러를 더블 클릭하면 된다.

그림 5-5  빌드 로그

 

그림 5-6 처럼 완전한 빌드 명령과 결과를 보려면 빌드 명령이 있는 줄 끝의 목록 아이콘을 클릭해야 한다.

그림 5-6  여러 빌드 명령이 기록된 빌드 로그

중단점 관리를 위한 소스 편집기와 중단점 내비게이터

어느 시점에 프로그램의 실행을 멈추고 실행 코드의 상태를 보기 위해서 디버거를 사용할 수도 있지만, 지정한 위치에서 멈추고 소스 코드의 포함된 변수들의 값을 보기위해서 실행 파일을 실행하기 전에 중단점을 설정할 수 있다.

중단점을 설정하기 위해서는, 소스 코드를 열고 실행할 때 멈추기를 원하는 지점에서 코드 앞에 있는 여백부분을 클릭해야 한다. 코드에 중단점을 추가하면 Xcode 는 장동으로 툴바의 중단점 상태 버튼을 enable 상태로 바꾼다.


enable 상태


disable 상태

중단점 상태 버튼을 클릭하여 중단점의 enable 상태를 바꿀 수 있다. 중단점의 아이콘을 클릭하여 개별 중단점을 disable 상태로 만들 수 있다. 중단점을 완전히 제거하려면 여백에서 드래그하여 외부 영역에서 드롭하면 된다.

조건, 중단점에서 멈추기 전에 중단점을 그냥 넘어갈 회수, 중단점에서 멈췄을 때 실행할 동작고 같은 각 중단점에 대한 몇가지 옵션을 설정할 수 있다. 중단점 옵션을 설정하기 위해서는 중단점 내비게이터를 열고, 그림 5-7 과 같은 옵션 설정을 원하는 중단점을 더블 클릭해라. Condition 은 중단점을 실행할 조건을 명시하도록 한다. 조건을 명시하게 되면, 중단점은 조건이 참이 되는 경우만 멈추도록 한다. 조건에 명시하는 내용은 예를 들면 i == 24 과 같다. 해당 중단점에서 사용이 가능한 어떤 변수라도 조건에 사용할 수 있다. 함수 호출인 경우는 해당 리턴 타입으로 변환되도록 해야 한다.

그림 5-7  중단점 옵션 설정

쓰레드와 스택 검사용 디버그 내비게이터

코드의 실행이 멈췄거나 실행 코드가 중단점에 도달했을 때, Xcode 는 실행이 멈추었을 때 실행되고 있는 쓰레드를 표시하는 디버그 내비게이터를 열게 된다. 코드의 실행이 멈추는 경우에 대한 정보는 "디버거 영역과 소스 편집기에서 프로그램 실행 제어"편을 참고해라. 각 쓰레드 아랫 부분은 프로그램 실행에서 해당 지점에서 쌓인 스택을 나타낸 것이다. 해당 소스 파일이나 디어셈블된 목적 코드를 소스 편집기에서 보려면 스택 자체를 선택하면 된다.

디버거 내비게이터 하단부의 슬라이더는 쓰레드와 스택 내비게이터가 표시할 스택 정보 양을 제어하는데 사용된다. 슬라더가 왼쪽 끝에 있으면, 디버거 내비게이터는 각 스택 최상위의 한 프레임만 보여준다. 오른쪽 끝에 있으면, 모든 스택 프레임을 다 보여준다. 모든 활성화된 쓰레드를 모드 표시하거나 시스템 라이브러리 코드와 반대되는 개념으로 개발자가 작성한 코드를 갖는 쓰레드만 표시하는 것을 서로 바꾸려면 슬라이더 왼쪽 끝에 있는 버튼을 클릭하도록 해라. 그림 5-8 은 실행이 중단점에서 멈춰줬을 때의 디버그 내비게이터 상태를 보여준다.

슬라이더 왼쪽 끝의 버턴

그림 5-8  중단점에서 멈춰진 디버그 내비게이터

디버거 영역과 소스 편집기에서 프로그램 실행 제어

Xcode 4 에서 프로그램을 실행할 때, 디버거 바는 그림 5-8 과 같이 편집기 팬의 하단부에 표시된다. 디버거 바는 다음 동작을 하기 위한 버튼들을 포함한다.

  • 디버거 영역을 열거나 닫기.

  • 코드 실행을 멈추거나 계속 진행.

  • Step over; 즉, 현재 줄의 코드를 실행하고, 현재 줄의 코드가 함수면, 현재 파일에서 다음 줄로 리턴한다.

  • Step in; 즉, 현재 줄의 코드를 실행하고, 현재 줄의 코드가 함수면, 그 함수의 첫 번째 줄로 이동한다.

  • 이동된 루틴으로 Step out; 즉, 현재 함수을 마무리하고, 다음 함수로 넘어가거나 부른 함수로 돌아간다.

코드 대신 어셈블리 명령으로 단계 별로 제어를 step over 와 step in 으로 바꾸거나 다른 쓰레드는 멈춰있는 동안 활성화된 쓰레드로만 step in 하려면 옵션 키나 시프트-옵션키를 누르도록 해라.

실행을 멈추거나 중단점에 도달하면, 그림 5-9 와 같이 변수와 레지스터 값을 보여주는 팬과 디버거 콘솔이 있는 디버거 영역이 열리게 된다. 변수나 콘솔 팬을 표시하거나 그 중 하나를 숨기기 위해서 디버거 영역 툴바의 오른쪽 끝에 있는 버튼들로 제어할 수 있다.

그림 5-9  디버거 영역

변수 팬은 변수와 레지스터를 표시한다. 변수 팬의 왼쪽 상단 모서리에 있는 팝업 메뉴를 사용하여 다음과 같은 표시할 항목을 선택할 수 있다.

  • Auto : 현재 사용할 수 있는 변수를 표시한다.

  • Local : 지역 변수만 표시한다.

  • All : 모든 변수와 레지스터를 표시한다.

변수 팬에 표시하는 항목을 필터링 하려면 검색어를 사용해라.

콘솔 팬은 프로그램 출력을 표시하며, 디버거 도구에 명령을 보낼 수도 있다. 콘솔 팬의 왼쪽 상단 모서리에 팝업 메뉴로 다음과 같은 표시할 콘솔의 출력 형식을 선택할 수 있다.

  • All Output : target 과 디버거 출력을 표시한다.

  • Debugger Output : 단지 디버거 출력만 표시한다.

  • Target Output : target 출력만 표시한다.

그림 5-10 처럼 쓰레드와 스택을 탐색하기 위해서 디버거 바에서 내비게이션 팝업 메뉴를 사용할 수도 있다. 또는 디버거 내비게이터를 사용해도 된다.

그림 5-10  디버거에서 쓰레드와 스택을 이용한 탐색

Xcode 3 에서 사용했던 방법과 동일한 방법으로 소스 편집기에서 코드를 단계별로 실행하거나 변수 값을 볼 수 있다. 예를 들어, 특정한 줄의 코드에서 실행을 계속하기 위해서는 다음 위치의 코드로 왼쪽 여백 위에서 continue-to-here 아이콘이 나올 때까지 마우스를 누른 다음에 그림 5-11 과 같은 아이콘을 클릭해주면 해당 위치까지 계속 실행된다. 변수의 값을 보기 위해서는 그림 5-12 와 같이 편집기에서 변수 이름을 클릭하면 된다.

그림 5-11  continue-to-here 명령 활성화

그림 5-12  소스 편집기에서 변수의 값 읽기




'개발 > App Developer' 카테고리의 다른 글

Xcode 4 기초 지식  (0) 2010.08.31
Xcode 4 사용자 인터페이스 디자인  (0) 2010.08.30
Xcod 4의 반가운 새로운 기능 두 가지  (0) 2010.08.30
2010.08.11 - coredata 이해  (0) 2010.08.30
기본적인 상호작용  (0) 2010.08.30