지난 글에서 브레이크 포인트를 소개하고 사용하는 방법에 대해서 간단히 이야기했었습니다.
오늘은 브레이크 포인트를 사용해서 어떤 것을 할 수 있는지 다루기 전에 LLDB 에 대해서 알아보겠습니다.
저와 여러분들 모두 개발하면서 많이들 본 화면입니다. 브레이크 포인트에 의해 코드의 진행이 멈추거나, 크래시가 발생했거나 하는 상황에서 Xcode 의 Debug Area 에 위치한 콘솔에 노출되는 화면입니다. 얼마 전까지도 (lldb) 라는 4글자가 뭘 의미하는 건지 알지 못했고, 사실 지금까지도 LLDB 에 대해서 자세히 알지는 못합니다.
콘솔에 노출된 LLDB 는 Xcode 에 내장된 Debugger 의 이름입니다. LLDB 에 명령어를 작성함으로써 우리는 좀 더 쉽게 디버깅할 수 있습니다. 아래 이미지와 같이 개발자가 입력을 할 수 있게끔 인터페이스가 구성되어 있습니다.
어렵게 LLDB 가 무엇이며 어떻게 작동하며 어떤 언어로 만들어졌는지에 대한 글들은 구글에 검색하시면 많이 찾아보실 수 있습니다.
이 글에서는 "그래서 이걸 어떻게 사용해야하는건데?" 에 초점을 맞추었습니다. 이 글에서는 사용하는 방법에 대한 기초적인 것들을 알려드리고 응용은 여러분들의 몫입니다.
구체적인 사용법에 앞서 대부분의 개발자들은 디버깅을 할 때 크게 세 가지 방법을 사용합니다. (물론 제 뇌피셜입니다만...)
첫 번째 방법은 실제 작동하는 코드 사이에 print 나 NSLog 등을 이용해 값을 출력해서 확인하는 방법입니다. 이 방법의 장점은 별도의 학습 없이 자연스럽게 하고 있는 행동이며 원하는 지점에 코드를 작성하거나 특정 조건을 작성하는 방법으로 원하는 타이밍에 값을 출력할 수 있다는 점입니다. 반면에 불편한 점은 다른 값을 확인하고 싶을 때마다 매번 새롭게 빌드를 해야 한다는 것입니다. (빌드 타임이 길어진다면 끔찍합니다. 다만 우리 모두 여기에 적응해가고 있어요.)
두 번째 방법은 브레이크 포인트를 걸어서 Debug Area - Variables View 에서 변수를 확인하는 방법입니다. 이 방법의 장점은 눈썰미가 있다면 자연스럽게 학습할 수 있으며 현재 스코프에서 확인 가능한 모든 변수들을 볼 수 있다는 점입니다. 단점도 마찬가지로 현재 스코프에서 확인 가능한 변수만을 볼 수 있다는 것입니다.
세 번째 방법은 LLDB 를 사용하는 방법입니다. 브레이크 포인트를 사용한다는 점은 두 번째 방법과 동일하지만 변수를 확인하는 방법 뿐만 아니라 새로운 코드도 런타임에 추가할 수 있다는 점입니다. (엥 그게 말이 되냐?)
이 역시도 p, po, e, expr, expression 에 대해서 다룬 글들이 이미 존재합니다. 역시 이 글에서는 다루지 않겠습니다. 저 같은 경우엔 po 를 선호합니다. (이유는 묻지 말아주세요. 사실 단지 이게 손에 익숙해요.)
p | prints value of primitive variable or value of a reference |
|
po | print object | try to call -description for that object and print returned string |
변수를 확인하는 방법에 대해서는 알았고, 다음은 새로운 코드를 추가하는 방법입니다. 저 같은 경우엔 회사에서 스토리보드를 사용하지 않고 코드 베이스로 작업을 하다보니 UI 배치가 제가 원하는 형태로 됬는지 확인하기 위해 UIView 에 border 와 backgroundColor 를 추가하는 방법을 사용합니다. 이걸 lldb 와 함께 사용하면 원하는 타이밍에 메서드를 호출해서 뷰의 구성을 확인할 수 있습니다.
위 이미지처럼 화면이 구성된 다음 브레이크 포인트에 걸린 상황에서 lldb 에 코드를 작성한다면 런타임 도중에 코드가 새롭게 실행됩니다. 그리고 브레이크 포인트에서 빠져나왔을 때 실행된 코드가 반영된 것을 볼 수 있습니다. 즉, 런타임 과정에서 특정 객체의 프로퍼티를 바꾸는 등의 행동이 가능해지는 거죠.
어때요? 실무에서 어떻게 활용하실지 감이 잡히시나요? (부디 그랬으면 좋겠습니다.)
다음 포스팅에서는 브레이크 포인트와 LLDB 를 섞어서 사용하는 방법에 대해 다루겠습니다.
'Xcode' 카테고리의 다른 글
[Xcode] M1 'cyclone' is not a recognized processor for this target 해결법 (0) | 2022.07.27 |
---|---|
[Xcode] Cocoapods 를 사용하는 경우 M1 시뮬레이터 빌드가 안되는 문제 (1) | 2021.05.13 |
[Xcode] libSwiftPM.sylib 플러그인을 사용하는 동안 Xcode이(가) 예기치 않게 종료되었습니다. (0) | 2021.04.05 |
[Xcode] Breakpoint 사용하기 (3) - NSLog (0) | 2020.07.07 |
[Xcode] Breakpoint 사용하기 (1) - 브레이크 포인트 (0) | 2020.07.04 |