Youngminah/TIL

LLDB

Youngminah opened this issue · 0 comments

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:)함수 이용
    image
  • Button내 Label의 주소인 0x7fdf761148b0를 알고있는 상태에서, 해당 Label 객체의 정보를 얻dma.
  • UIKit을 우선 import하고, LLDB Console에서 UILabel type을 사용할 수 있게 한다.
  • 그리고 unsafeBitCast(to:)함수를 이용해 0x7fdf761148b0 주소값의 UILabel을 $myLabel변수에 할당
  • 그러면 $myLabel을 이용해 해당 Label의 정보를 알 수 있게 됨