일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 앱개발
- 이론
- WeatherKit
- 학과별커뮤니티
- Optional
- 옵셔널
- swift
- Kingfisher
- GCD
- async
- 네트워크
- 기초문법
- 스트럭트
- 토이프로젝트
- MVVM
- 프로토콜
- collectionview
- 대표
- uikit
- 세종대학교
- 실습
- struct
- 반응형
- CS
- mvc
- SwiftUI
- RxSwift
- 동시성
- ios
- 구름톤 유니브
- Today
- Total
스윞한 개발자
iOS - LLDB 본문
안녕하세요! 이번 포스팅에서는 LLDB에 대해 공부하고 정리해 보겠습니다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/005.gif)
## LLDB(Low Level Debugger)
먼저 공식 홈페이지부터 파해쳐 보겠습니다!
🐛 LLDB
Next Tutorial
lldb.llvm.org
LLDB란?
- LLVM의 디버거 컴포넌트를 개발하는 애플의 서브 프로젝트
- 디버거 - 디버깅 도구
- Xcode에 들어있는 도구
먼저 LLDB가 무엇인지 알기 위해서 LLVM에 대해 정리해 보겠습니다!
#LLVM
LLVM은 Apple에서 진행한 컴파일러에 필요한 Toolchain 개발 프로젝트입니다. 각 컴포넌트들의 재사용성을 중시하기 때문에 모듈화가 잘 되어있습니다.
LLDB는 LLVM의 Debugger Component를 개발하는 서브 프로젝트입니다. LLDB를 사용한다면 실제 프로그램이 어떤 식으로 동작하는지 깊이 이해할 수 있습니다.
즉, LLDB란
애플에서 어떤 시스템을 개발할 때 필요한 프로그램 도구를 만들었는데 그 이름이 LLVM이고 이 툴체인 중 하나인 디버깅 툴이라고 정리해보겠습니다. (C, C++, Objective-C, Swift 등 많은 언어들을 지원합니다.)
#LLDB 시작하기
Xcode에서 실행 중인 프로젝트의 프로세스가 Breakpoint에서 멈추거나, 정지 버튼을 통해 일시정지 된다면 Xcode에서 LLDB Debug 콘솔이 나타나게 됩니다.
LLDB에는 수많은 명령어와 해당하는 Subcommand, Option들이 존재합니다.
* Help
해당 문법으로 사용가능한 Subcommand, Option 리스트나 사용법들을 보여주는 명령어입니다.
# LLDB에서 제공하는 Command가 궁금하다면,
(lldb) help
# 특정 Command의 Subcommand나, Option이 궁금하다면,
(lldb) help breakpoint
(lldb) help breakpoint set
* Apropos
원하는 기능의 명령어가 있는지 키워드를 통해 알아볼 수 있는 명령어입니다.
# reference count를 체크할 수 있는 명령어가 있을까? 궁금하다면,
(lldb) apropos "reference count"
# 결과
# The following commands may relate to 'reference count':
# refcount -- Inspect the reference count data for a Swift object
LLDB의 여러 요소들이 있는데 그중 가장 중요하다는 Stepping에 대해 알아보겠습니다.
Stepping은 프로레스를 단계별로 진행하면서 상태 변화를 관찰하는 기능입니다.
*Stepping
- Stepping Over : (lldb) next Command를 사용하면, 현재 Break 걸려있는 지점에서 다음 Statement로 Step Over 할 수 있습니다.
(줄여서 (lldb) n으로 사용 가능)
- Stepping In : 다음 Statement가 Function Call 인 경우 Debugger를 해당 함수 내부에 위치한 시작 지점으로 이동하게 해 줍니다. (lldb) step Command를 이용해 실행할 수 있습니다. (줄여서 (lldb) s로 사용 가능)
- Stepping Out : 현재 진행 중인 function이 반환될 때까지 프로그램을 진행한 후 프로그램 Break를 걸어주는 Stepping Action을 Stepping Out이라고 합니다. (lldb) finish Command로 실행할 수 있습니다.
LLDB Console 상단에 위치한 버튼은 왼쪽부터 Step-Over, Step-In, Step-Out을 의미합니다.
* breakpoint
프로그램에서 디버깅할 때 정지될 지점을 설정하고 여러 가지 다른 시도를 해 봐야 합니다.
(lldb) breakpoint set [option] "arguments"
(lldb) br s [option] "arguments"
위와 같이 breakpoint를 설정하고 이름을 넣어줄 수 있습니다.
// viewDidLoad 함수의 이름을 이용하여 break
(lldb) breakpoint set --name viewDidLoad
(lldb) b -n viewDidLoad
// ViewController.swift의 20번째 line에서 break!
(lldb) br s --file ViewController.swift --line 20
(lldb) br s -f ViewController.swift -l 20
// viewWillAppear 호출 시, animated가 true인 경우만 breakpoint!
(lldb) breakpoint set --name "viewWillAppear" --condition animated
(lldb) br s -n "niewWillAppear" -c animated
// ViewControler.swiftdml 17번째 라인에서 helloWorld가 "abc"인 경우 break
(lldb) ViewController.swift -l 17 -c 'helloWorld == "abc"'
이처럼, 다양하게 lldb를 이용해 breakpoint를 설정할 수 있습니다.
// breakpoint 리스트 확인
(lldb) breakpoint list
(lldb) br list
// 전체 breakpoint 삭제
(lldb) breakpoint delete
(lldb) br de
// 특정 breakpoint 삭제
(lldb) br de 1
// 전체 breakpoint 비활성화
(lldb) breakpoint desable
(lldb) br di
// 특정 breakpoint 비활성화
(lldb) br di 1.1
그리고 삭제, 비활성화, 리스트 확인 등 다양한 작업을 진행할 수 있습니다.
* po
lldb 명령어 중에 가장 많이 사용되는 것이 po입니다. 객체의 정보를 콘솔에 출력하는 명령어로 NSObject의 debugDescription 콘솔을 출력해 줍니다.
* expression
(lldb) e를 사용하면 해당 정보를 콘솔에 출력합니다. (e = expression의 줄임 표현)
이번 포스팅에서는 lldb로 디버깅을 하는지 알아보고 정리해 보았습니다! 감사합니다!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/026.gif)
위 글은 공식문서, 아래의 블로그 등을 참고해 작성하였습니다.
https://yagom.net/courses/start-lldb/
LLDB 정복 - 야곰닷넷
po 를 알고계신가요? 몰라도 상관없습니다. LLDB Debugging 배우러 갑시다! ?
yagom.net
https://zzoo789.tistory.com/entry/iOS-LLDBLow-Level-Debugger에-대하여
[iOS] LLDB(Low-Level-Debugger)에 대하여
✏️ Debugging이란? 디버깅(또는 디버그)이란 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산(버그)을 찾아내고 그 원인을 밝히고 수정하는 작업을 말한다. - 위키백
zzoo789.tistory.com
https://ch4njun.tistory.com/168
[IOS] lldb를 이용한 IOS Application 동적 디버깅 ( + Cheat Sheet)
lldb를 사용해 IOS의 Application 동적 디버깅을 진행하는 방법에는 두가지가 있다. 1) macOS의 xcode를 사용해 원격으로 디버깅을 진행하는 방법 2) lldb-10 tweak을 설치해 로컬에서 진행하는 방법 (별다른 S
ch4njun.tistory.com
'Swift 이론' 카테고리의 다른 글
Mac Catalyst 살펴보기 (2) | 2024.12.29 |
---|---|
Combine 알아보기 (0) | 2024.08.05 |
iOS - 앱 생명주기(Lifecycle) (0) | 2024.04.17 |
Swift - ModernCollectionView (0) | 2024.04.14 |
Swift - CompositionalLayout (2) | 2024.04.13 |