LLDB

LLDB (6) - 오픈소스 스크립트 (Chisel)

GREEN.1229 2021. 4. 22. 12:00

안녕하세요. 그린입니다🟢

이번 포스팅에서는 이전 Derek Selander 오픈소스에 이어 Chisel에 대해 학습해보겠습니다🧑🏻‍💻

 

Chisel?

 - iOS 앱 환경에서 디버깅 시 다양하고 유용한 LLDB 명령어들을 지원하기 위한 오픈소스 라이브러리 

 - 명령어중 OS X 지원되지 않고 iOS에서만 지원되는것들도 있음 (뷰에 관한것들)

 

Chisel 설치

  1. brew update (홈브류 버전 업데이트)
  2. brew install chisel (홈브류를 통한 chisel 설치)
  3. ~/.lldbinit 파일 오픈
  4. command script import /usr/local/opt/chisel/libexec/fbchisellldb.py (내용 추가)

Chisel Command

 - pview: 현재 창에 표시되는 모든 UIView 출력 ( 계층구조)

 

 - pvc: 현재 창의 뷰컨트롤러 계층구조와 정보 출력

 

 - visualize: UIImage, GCImageRef, UIView, CALayer, NSData, UIColor, CIColor, CGColorRef 등을 미리보기로 보여줌

  -> 보려는 뷰 객체의 주소값을 넣어주어야함

 

 - fv: 찾는 클래스 이름의 정규식과 일치하면 계층에서 해당 객체를 찾음 (주소값을 반환)

 - fvc: 찾는 뷰컨트롤러의 정규식과 일치하는 뷰컨트롤러를 찾음 (주소값 반환)

 - show/hide: 뷰나 레이어를 보여주거나 숨김

  -> 원하는 객체의 주소값을 이용하여 숨김/보임 처리를 하면 시뮬레이터에 나타남

 

 - mask/unmask: 투명 직사각형을 /레이어 위에 보여주거나 사라지게함 (배경을 만들어주는것과 비슷)

  -> 아래 기준으로 깔린 뷰의 크기만큼 잡힘

 

 - border/unborder: /레이어에 경계선(보더) 그리거나 지워줌

  -> 색상 / 두께 옵션을 다 줄 수 있음

 

 - caflush: 화면을 바로 다시 그리도록함

 

 - wivar: 객체의 인스턴스 변수에 감시 포인트 설정

 

 - presponder: 특정 객체의 리스폰더 체인을 출력

 

 "이외에도 다양한 명령어가 있고 또한 사용자 지정 명령을 추가할 수 있음"

 

사용자 지정 명령어 추가 방법

  1.  ~/.lldbinit 파일에 추가

  2. command script import /path/to/fbobjclldb.py

      script fbobjclldb.loadCommandsInDirectory(‘로컬 사용자 지정 명령어 파일 경로’)

 

 

[느낀점]

Chisel이 정말 강력한 기능들을 많이 제공해주는것같다. 특히 어느곳에서 디버깅 시 적용해보면 좋을지 생각을 해보았는데, 오토레이아웃을 잘못 잡거나 할때도 유용할것 같다.

모호한 오토레이아웃된 객체들의 정보를 알아내고 그 객체에 보더값을 설정하여 복잡한 화면에서도 아 이곳이 잘못되었구나 이곳만 수정하면 되겠구나하고 직관적으로 알 수 있다.

Derek Selander에 이어 Chisel을 학습해보고 다뤄보면서 느낀게 정말 천재들이 많고 우리는 그 천재들에게 감사해하며 노력이 헛되지않게 잘 따라 유용하게 써야겠구나..! 싶었다.

그러다보면 언젠가 오픈소스 라이브러리에 기여하는 날이 오지 않을까?🙌👏

 

[참고자료]

github.com/facebook/chisel

http://minsone.github.io/ios/mac/xcode-lldb-debugging-with-xcode-lldb-and-chisel

https://yagom.net/courses/start-lldb/