XCode에서 디버깅하는 방법
디버깅 시 유용한 팁들
1. #warning syntax를 쓰면 이슈 네비게이터에 표시되므로 나중에 되짚어볼것들을 메모할 수 있다. 변수를 고치고 실행하면 이번에는 아래와 같이 런타임 에러가 뜬다.
2. 디버그 네비게이터를 보는데, 여기서는 CPU, 메모리, 디스크, 네트워크의 리얼타임 실행결과를 볼 수 있다. 프로그램이 의도대로 작동하는지 힌트를 얻기 유용하다. 예를 들어 클라우드 서비스로부터 데이터를 받아오는 함수를 만들었다고 쳤을 때 네트워크 게이지인 KB/s 수치가 0 이상인지 보는 식으로.
여기서 3. 콜 스택도 볼 수 있는데, stact trace라고도 알려져있다. 프로그램이 실행되면 콜스택이라는 데이터 구조에 데이터를 저장한다. 런타임 에러가 발생하면 컴파일러는 콜스택의 상태 로그를 보여주는데 이것이 앞에서 말한 stact trace이다. 호출된 메서드들의 순서를 보면서 어떻게 에러 상태에 도달했는지 연역적으로 추론해나갈 수 있다. 브레이크포인트로 더 깊게 추적 가능하다.
4. Debug area에는 두가지 영역이 있다: 좌 variable pane / 우 console
variable pane은 모든 오브젝트와 변수들의 실행 context와 그에 따른 값들에 계층적인 접근을 할 수 있다. Breakpoint 을 쓸 때 유용하게 참고할 수 있다.
console은 에러 메시지가 설명되는 창이다.
(lldb)란?
에러메시지의 끝에, lldb가 보일것이다. 이것은 Low-Level DeBugger을 뜻하는데, LLVM의 디버깅 프레임워크를 말한다. 그럼 LLVM이 뭘까? LLVM은 엑스코드의 컴파일러 프레임워크인데, 고레벨 언어로 쓰인 것을 저레벨(기계어)로 번역해주는 역할을 하는 것이다.
5. Break Point란?
코드 실행을 특정 줄까지 실행할 수 있도록 멈추는 역할을 해서 코드가 어떻게 돌아가는지 더 잘 알수있게 해주는 강력한 디버깅 툴이다. 코드 실행 전에도, 실행 중(recursive일때 등)에도 설정할 수 있다.
위에서 설명했던 Debug area의 variable pane을 보면 위와 같이 변수와 그 실행값들을 볼 수 있다.
꿀팁: 빨간색으로 표시한 step into 버튼을 누르면 한 줄씩만 코드를 더 실행할 수 있다.
또한, 코드가 복잡할 때 이렇게 여러개의 브레이크포인트를 놓고,
continue execution 버튼을 누르면 다음 브레이크 포인트까지 실행되고, 그 실행에 따라 variable pane도 업데이트된다.
6. Breakpoint Navigator
이 버튼을 누르면 내 코드 안의 모든 브레이크포인트 리스트를 볼 수 있다. 브레이크 포인트가 많을때, 관리하기 쉽다. 더이상 사용하지 않는 브레이크포인트를 삭제할때 등.. 우클릭으로 삭제하거나 또는 그냥 코드 라인에서, 브레이크포인트에 우클릭해서 삭제하거나 아니면 그냥 밖으로 끌어내거나. 하면 된다.