-
LLDB (5) - 오픈소스 스크립트 (Derek Selander)LLDB 2021. 4. 21. 12:53
안녕하세요. 그린입니다🟢
이번 포스팅에서는 이제 LLDB의 기본적으로 제공되는 명령어를 넘어 다양한 오픈소스 스크립트를 통해 활용하면 좋을 명령어들에 대해 알아보겠습니다🧑🏻💻
왜 오픈소스 LLDB 스크립트를 알아야할까?
- 사실 몰라도 상관없습니다. 다만 여태 명령어들을 복잡하게 조합하여 LLDB 명령어들을 썼던 부분들에 대해 오픈소스에서는 이미 그런 명령어들을 좀 더 편리하게 쓰도록 조합해놨기에 쓰면 훨씬 편리하겠죠?😁
오픈소스를 가져다 쓰는 방법
1. HomeBrew를 통해 라이브러리를 다운하여 .lldbinit 파일에 넣는 방법
2. 오픈소스 깃헙을 클론해서 경로를 가지고 .lldbinit 파일에 넣는 방법
.lldbinit 파일이란?
- lldb를 실행 시 초기파일로 앞서 설명한 alias와 같이 지정해놓고 싶거나 아니면 오픈소스를 가져와 추가해서 사용할 수 있습니다.
- 해당 파일은 홈 디렉토리에 숨겨진 파일로 위치해있으며 없다면 생성하면 됩니다🤖
"그렇다면 이제 편리하게 쓸 수 있는 오픈소스 스크립트에 대해 알아보겠습니다. 오늘은 Derek Selander라는 개발자가 만든 오픈소스에 대해 가져와보고 실습해보겠습니다!!!"
Derek Selander 오픈소스 스크립트 가져오기
1. https://github.com/DerekSelander/LLDB (깃헙 접속)
2. 해당 레파지토리를 클론하여 원하는 위치에 저장
3. ~/.lldbinit 파일 오픈
4. command script import "클론받은 경로"/LLDB/lldb_commands/dslldb.py를 파일에 작성 및 저장
Derek Selander LLDB Script
- search: 특정 클래스의 모든 활성 인스턴스에 대한 힙 검색
-> UIView의 인스턴스 및 서브클래스 탐색
-> -e 옵션을 줄경우 서브클래스는 무시하고 인스턴스만 탐색
- dclass: 프로세스의 모든 NSObject / SwiftObject가 상속된 클래스의 정보를 출력
- section: 프로세스에 실행된 파일/프레임워크의 Mach-O 세그먼트 데이터 표시
- dd: disassemble 명령을 알아보기 쉽게 색상으로 표시 (터미널 전용)
- lookup: 해당 메서드를 포함하는 모든 메서드 추적 (image lookup 기능과 비슷)
-> -s 옵션을 주어 축약하여 출력
Derek Selander LLDB Command
- ls: 실행중인 앱의 기기의 디렉토리를 출력
-> (lldb) ls "찾으려는 디렉토리 경로"
- reload_lldbinit: lldbinit 파일의 내용을 다시로드 (Xcode 재시작 없이도 가능)
- tv: 현재 뷰에서 히든된 값을 전환
- pprotocol: 해당 프로토콜에 대한 모든 메서드 정보 출력
- pframework: 프레임워크 위치 출력
- sys: 명령 실행을 위한 쉘로 이동 (쉘 명령어 사용 가능하게 LLDB 콘솔에서)
- methods: 객체에서 사용 가능한 모든 메서드 정보 출력
- ivars: NSObject에서 상속된 객체의 인스턴스에 대한 모든 변수정보 출력
- dumpenv: 프로세스 환경 변수 정보 출력
- keychain: 프로세스 관련 키체인 DB 정보 덤프
(lldb) keychain <__NSArrayM 0x600001fb1590>( { acct = "localdevice-AuthToken"; agrp = apple; "v_Data (str)" = "A8CD94D2-13E3-40B...
"이외에도 info / lsof 등 다양한 명령어가 존재"
[느낀점]
여태까지 기본적으로 제공되어 사용하는 LLDB 명령어를 익혔을때도 이걸 언제 다 외우지 또는 이걸 어떤 상황에서 어떻게 조합해서 사용할까 였는데 그런 걱정들을 해결해줄 수 있는게 오픈소스라고 느껴졌다. 특히 Derek Selander의 명령어를 사용하며 tv / ls / pprotocol 명령어는 지금 내 상황에 더 유용하게 사용될 수 있을것 같다. 정말 많은 LLDB를 편리하게 사용할 수 있는 오픈소스가 있겠지만 우선 기본에 충실하고 오늘 배운 오픈소스와 뷰 디버깅에 유용한 Chisel까지만 욕심내서 해보고 다져봐야겠다🧐
[참고자료]
'LLDB' 카테고리의 다른 글
LLDB - 명령어 (7) (0) 2021.04.23 LLDB (6) - 오픈소스 스크립트 (Chisel) (0) 2021.04.22 LLDB - 명령어 (4) (0) 2021.04.20 LLDB - 명령어 (3) (2) 2021.04.19 LLDB - 명령어 (2) (0) 2021.04.17