LLDB
Youngminah opened this issue · 0 comments
Youngminah commented
LLVM
- LLVM은 Apple 에서 진행한 Compiler에 필요한 Toolchain 개발 프로젝트
LLDB
- LLDB는 LLVM의 Debugger Component를 개발하는 서브 프로젝트
- LLVM 프로젝트를 통해 개발된 Clang Expression Parser, LLVM Diassembler 등
- Low-Level 컨트롤이 가능한 모듈들로 이루어져 있어,
- 기계어에 가까운 영역까지 디버깅 가능하다는 장점.
- 🤗 C, C++, Objective-C, Swift를 지원하며, 현재 Xcode의 기본 디버거로 내장되어 있다.
Expression po
- 실무에서 LLDB Command중 가장 많이 사용되는 Command가
(lldb) po
- 객체에 대한 다양한 정보를 Console에 출력하여 확인
Expression 변수 사용
(lldb) expression
Command는 Runtime에 여러 정보를 출력할 수 있을 뿐아니라 값을 변경 해줄 수도 있다.- LLDB는 내부적으로 값이 출력될때마다 local variable을 $R~의 형태로 만들어 저장
이런식으로 실행해보기
(lldb) expression self.view
(lldb) expression $R0.backgroundColor = UIColor.blue
(lldb) continue
- 두 줄의 expression Command로 인해
- 실제 ViewController.view의 backgroundColor 속성이 변경되었음을 확인
Expression 변수 선언
(lldb) expr let $someNumber = 10
(lldb) expr var $someString = "some string"
- 직접 변수를 선언하여 사용할 수도 있다.
- 단 사용하고자 하는 변수명 앞에 $를 붙여주어야함.
Multi-line Expression 입력
(lldb) expression
명령어를 입력하고 엔터를 누르면 Multi-line Command를 입력할 수 있게 된다.
주소값 이용해서 변수 사용해보기
- 객체의 주소값과 타입을 알고 있는 경우, 해당 변수의 정보를 알아보는법
unsafeBitCast(to:)
함수 이용
- Button내 Label의 주소인
0x7fdf761148b0
를 알고있는 상태에서, 해당 Label 객체의 정보를 얻dma. - UIKit을 우선 import하고, LLDB Console에서 UILabel type을 사용할 수 있게 한다.
- 그리고
unsafeBitCast(to:)
함수를 이용해0x7fdf761148b0
주소값의 UILabel을 $myLabel변수에 할당 - 그러면 $myLabel을 이용해 해당 Label의 정보를 알 수 있게 됨