본문 바로가기

iOS 앱 개발자 프로젝트/iOS 입문

[iOS] Low-Level Debugger (LLDB) (feat. LLVM)

2024년 3월 20일 수요일

 

LLDB의 기능과 장점에 대해 정리하고, 브레이크 포인트를 통한 간단한 디버깅을 해본다.


LLDB (Low-Level Debugger) 

 

- 쉽게 버그를 추적하고,

  매번 빌드를 하여 테스트를 해보는 런타임 시간을 줄이기 위해 사용하는 디버거

  →  런타임 시 일어나는 논리적 오류를 잡는것이 목표(not 문법적 오류)

 

- Xcode의 기본 디버거로 내장되어 있음 (LLVM의 디버거 컴포넌트를 개발하는 애플의 서브 프로젝트)

 

- LLVM의 프론트엔드에 대응하는 디버거로 간결하고 명확한 에러메시지가 장점

 

- 로우레벨 컨트롤 가능한 모듈로 이뤄져있으며 기계어에 가까운 영역까지 디버깅 가능(C/C++/Objective-C/Swift 지원)


 

브레이크 포인트를 활용하여 값을 디버깅 해보기

 

 

step 1 ]

textLabel.text를 설정하기 전과, “버튼을 클릭했습니다”로 설정한 후 시점에 각각 브레이크 포인트를 찍어준다.

 

 

 

step 2 ]

앱을 실행한 다음, 버튼을 클릭하여 브레이크 포인트를 작동시킨다.

 

좌측 하단에서 브레이크 포인트가 멈춘 시점에 선언되어 있는 value들을 확인할 수 있다.

우측 하단에서는 LLDB 명령어를 입력할 수 있다.

 

 

 

step 3 ]

textLabel.text를 설정하기 전 시점의 브레이크 포인트가 작동했을 때, LLDB po 명령어를 사용해 textLabel의 text을 출력

 

LLDB po 명령어 ▽

po self.textLabel.text

 

 

 

step 4 ]

textLabel.text를 “버튼을 클릭했습니다”로 설정한 이후 시점의 브레이크 포인트가 작동했을 때,

LLDB po 명령어를 사용해 textLabel의 text을 출력

 

 

 

step 5 ]

브레이크 포인트를 통해 디버깅 후 다음 브레이크 포인트가 설정된 곳까지 코드를 실행해야할 경우 디버깅 영역에서 아래 주황색 박스로 되어 있는 부분인, Continue program execution 혹은 Step over를 통해 진행할 수 있다.

 

 

그 외의 명령어들 

해당 브레이크 포인트가 작동하여 멈춘 시점에서 값을 수정하거나 새 값을 선언해보면서 테스트 해 볼 수 있다.

// 값 수정 가능
expression self.textLabel.text = "LLDB 명령어에서 수정도 가능합니다"

// 값 선언 가능 ($를 꼭 붙여주세요)
expr let $somNumber = 10