티스토리 뷰
프로그래밍 과정에서 가장 오래⏰걸리는건
디버깅하는 부분이라고 생각합니다!
그만큼 중요하다는 것이죠👍🏻
그래서 이번에는, 제가 공부중인 Swift 디버깅에 찰떡인 LLDB에 대해 정리해 보았어요📝
(Xcode의 기본 디버거로 내장되어 있기 때문이죠😲)
LLVM
위키피디아에서는,
프로그램을 컴파일 타임, 링크 타임, 런타임 상황에서 프로그램의 작성 언어에 상관없이 최적화를 쉽게 구현할 수 있도록 구성된 컴파일러 기반구조
라고 표현합니다.
어렵고 복잡하다면,
그냥 한번에 여러가지 언어를 잘 알아먹는 컴파일러라고 생각하면 돼요!
(본래는, 언어당 하나씩 컴파일러를 매칭시켰다고 하더군요😲)
그리고, 각 컴포넌트들의 재사용성♻️을 중시해서,모듈화🧱가 잘 되어있다는 특징이 있습니다.
LLDB
위키피디아에서는,
클랭 식(expression) 파서와 LLVM 디스어셈블러와 같은 더 커다란 LLVM 프로젝트로부터 기존 라이브러리들을 광범위하게 사용하는 재사용 가능한 구성 요소들의 집합으로 구성된 소프트웨어 디버거
라고 말하는데...
이역시 간단하게,
LLVM이 컴파일한 애플리케이션을 디버깅할 때 쓰는 툴이라고 생각하면 돼요!
(LLVM front-end debugger🕵🏻♂️🪲)
그렇기 때문에 Low-Level 컨트롤이 가능한 모듈들로 이루어져 있고,
기계어🤖에 가까운 영역까지 디버깅 가능하다는 장점이 있습니다.
(현재 C, C++, Objective-C, Swift를 지원한다고 합니다!)
명령어 구성
LLDB는 다음과 같은 명령어 구조를 가집니다.
(lldb) [A] [B] [C] [D]
첫 번째로 A부분은 Command,
두 번째로 B에는 Subcommand,
세 번째로 C에는 Option,
네 번째로 D에는 Argument가 들어갑니다.
🤨?
예를 들어,
(lldb) breakpoint set --file "test.swift" --line "10"
이런 명령어가 있다면,
첫 번째의 breakpoint는 Command,
두 번째의 set은 Subcommand,
세 번째의 --file, --line은 Option,
네 번째의 "test.swift", "10"은 Argument를 나타내는 것이죠!😲
근데! 위의 예시를 그냥 쭉 읽어보면,
"test.swift파일의 10번째 줄에 중단점을 세팅하시오!"
같은 명령같지 않나요..?
(와우 멋져라🤩)
점점 더 배우고 싶어지는 마력(?)이 느껴지는군요🧙🏻♂️
여튼..
- Command와 Subcommand: LLDB 내 Object의 이름을 나타냅니다.
- Option: Command 뒤 어느 곳에든 위치 가능하며, -(hyphen)으로 시작합니다.
- Argument: Option에 대한 값으로 그냥 써줘도 되지만, 공백이 포함 되는 경우 때문에, ""로 묶어주는게 좋습니다.
필수 명령어
꼭!! 필수로 알아야 하는! 매우 중요한 두 가지 명령어가 있습니다⚠️
Help
우리가 구글링을 위해 웹브라우저를 여는 수고를 덜어주는 명령어에요😅
해당 문법을 이용하면 사용가능한 Subcommand, Option 리스트나 사용법을 알 수 있어요!# LLDB에서 제공하는 Command를 나타냅니다. (lldb) help # 특정 Command의 Subcommand나, Option을 나타냅니다. (lldb) help breakpoint (lldb) help breakpoint set
Apropos
"혹시 ~~한 명령어가 있나?" 싶을때 쓰는 명령어 입니다.# "referent count를 체크할 수 있는 명령어가 있을까?" (lldb) apropos "refernce count" # 작성 결과 # The following commands may relate to 'reference count': # refcount -- Inspect the reference count data for a Swift object
이런 식으로 사용하면 됩니다👍🏻
이렇게, LLVM과 LLDB에 대해 정리해봤어요!
앞으로는 눈대중으로 의심가는 함수 앞뒤로 print()
를 찍는 등의 이상한 짓😅 을 하지 않는,
고급스럽고 세련된 디버깅을 할 수 있을거 같아요🤓
이해가 안되는 부분이나, 틀린 부분이 있으면 코멘트를 남겨주세요!
피드백은 정말정말 환영입니다🎉🎉
Reference
'Swift' 카테고리의 다른 글
URLSession (0) | 2021.05.20 |
---|---|
고차함수 (Higher Order Functions, 고계함수) (0) | 2021.04.12 |
값 캡쳐 (Capturing Values) (0) | 2021.03.25 |
후위 클로저 (Trailing Closures) (0) | 2021.03.25 |
클로저 표현 (Closure Expressions) (0) | 2021.03.23 |