Xcode. Xcode 디버깅 팁

2019. 4. 22. 13:29Swift + iOS

Break Point

브레이크 포인트는 말 그대로 중단점이다. 코드를 실행하다가 지정해놓은 브레이크 포인트에 다다르게 되면 그 때 프로그램의 상태를 박제해 놓는다. 이렇게 박제해놓은 상태에서 디버깅을 진행하면 된다.

브레이크 포인트는 해당 라인에서 command + \ 를 누르거나 에디터의 라인 수를 보여주는 곳을 클릭하면 설정할 수 있다.

브레이크 포인트

Debugging Area

Xcode에는 Debugging Area가 있다. 우리가 맨날 보는 바로 그것.. 안보인다면 cmd + shift + Y 를 누르면 보인다.

Debugging Area

디버깅 영역에는 세가지 메인 컴포넌트가 있다. Debug Bar, Variables view, Console

Debug bar에는 디버깅과 관련한 버튼들이 있다.

Variables view는 코드의 현재 위치 범위에서 검사할 수 있는 변수들의 목록을 보여준다. 다시 말해, 브레이크 걸렸을 때의 변수들의 값과 상태등을 보여준다는 것이다. 

Console은 대화식 터미널과 유사한 텍스트 영역을 갖고 있어서, LLDB와 직접 상호 작용할 수 있다. (LLDB는 밑에서 다시 말해두립니댜)

 

Debug Bar

  1. 디버그 영역에서 Pause 버튼을 누르거나 앱이 브레이크 포인트에서 멈출 때까지 기다립니다.

  2. 현재 줄을 보고 다음 줄로 계속 진행하려면 Step over 버튼을 누릅니다.

  3. 함수 호출 시에 앱이 중지된 경우, Step into 버튼을 눌러 함수 내부로 들어가서 단계별로 진행합니다.

  4. Step out 버튼을 클릭하여 다음 함수의 return 문이 호출되거나, 스택 프레임이 팝 될 때까지 실행을 계속한 다음, 호출 된 위치로 빠져 나옵니다.

  5. 앱 실행을 계속하려면 Continue execution 버튼을 누릅니다.

라고 XCode Help에는 나와있는데, 요약해서 보면

 

- Disable/enable breakpoint: 모든 브레이크 포인트를 활성화/비활성화 할 수 있다.

- Pause/continue execution: 다음 브레이크 포인트가 나오기 전까지 계속 진행하겠다. 브레이크 포인트를 여러개 걸어놓고 이 버튼을 누르면서 사용하면 편하다.

- Step over: 브레이크 포인트가 걸린 라인의 다음라인으로 넘어가겠다.

- Step into: 만들어 놓은 메서드 안으로 들어가겠다. customMethod(aaa) 라면 customMethod 안으로 들어간다.

- Step out: 메서드 밖으로 벗어나가겠다. customMethod 밖으로 벗어난다.

 

Step over를 눌렀을 때
Step into 를 눌렀을 때: customMethod안으로 들어왔다
customMethod 안에 있을 때, Step out을 눌렀을 때: customMethod 내부를 벗어난다

오류 메세지 정확히 파악하기 

이제, 대충 디버깅 영역에 대한 건 알았으니까, 실제 오류가 났을 때를 생각해보자.

앗 오류가 났다. 그러면? 보통 우리는 빨간색 에러 메시지를 보다가

이렇게 브레이크 포인트를 건다.

 

그러나 가장 중요한 건 

Console에 오류 메세지가 나오고 있다.

Console에 나타나는 오류 메세지 읽기이다.

이 중에서도 가장 주의 깊게 읽어야 할 부분은 메세지의 윗부분이다. 

Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

지금은 간단히 코드를 작성해서 오류 메세지가 짧지만, 코드가 길어지게 되면 오류 메세지 또한 길어지게 된다.

이러한 오류 메세지를 보고 힌트를 얻어서 구글링을 하던지, 코드를 보고 문제점을 찾아나가야 한다. 메세지를 꼭 보자.

 

디버깅 명령어

그런데, 이 (lldb)는 뭘까? LLDB는 소프트웨어 디버깅 도구이다. LLDB 디버깅 명령어를 사용해 변수값을 보거나, 프로그램을 수정할 수도 있다. 이 명령어들을 이용하면 print("테스트테스트~~") 와 같은 코드가 사용하지 않아도 된다 :D 행복. 

 

po

po(p): print object, 현재 메모리 상태에 있는 것을 프린트 해준다. p로 사용해도 된다.

앱이 죽지 않은 상태에서 브레이크 포인트를 생성해서 해당 변수의 값을 확인할 수 있다.

브레이크 포인트를 잡은 상태에서 이제 어떤 변수가 어떤 값이 들어있는지 실시간으로 확인할 수 있다.

메모리를 박제해 놓은 상태.상태에서 메서드를 실행할 수도 있고, 실행결과의 값들을 볼 수도 있다.

expression

expression(expr): 

브레이크 포인트를 찍어서 새로운 변수를 넣어보고 싶다? 그러면 expression 명령어를 사용해보자.

현재 상태에서 새로운 변수를 만들어서 에디터에 코드를 작성하는 것과 같은 효과를 줄 수 있다. (인라인으로 작성하는 것)

 

 

이렇게 현재 상태를 박제해 놓고 변경하고 싶은 것들을 전부 변경하고, 다음 스텝으로 넘어가면 변경된 상태 그대로 전부 반영되게 된다.

ex. 색 변경, Auto Layout Constraint 변경을 하고 확인할 수 있다.

 


참고

https://help.apple.com/xcode/mac/10.2/index.html?localePath=en.lproj#/devda5478599

 

https://help.apple.com/xcode/mac/10.2/index.html?localePath=en.lproj#/devda5478599

To see this page, you must enable JavaScript. Pour afficher cette page, vous devez activer JavaScript. Zur Anzeige dieser Seite müssen Sie JavaScript aktivieren. このページを表示するには、JavaScript を有効にする必要があります。 若要查看此页面,您必须启用 JavaScript。 Om deze pagina te kunnen beki

help.apple.com

 

'Swift + iOS' 카테고리의 다른 글

iOS. 네비게이션 컨트롤러  (0) 2019.07.30
Swift. 클로저(Closures)  (0) 2019.05.07
Swift. Extension  (0) 2019.04.25
Swift. 옵셔널  (0) 2019.04.18