ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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까지만 욕심내서 해보고 다져봐야겠다🧐

     

    [참고자료]

    https://github.com/DerekSelander/LLDB

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

    '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
Designed by Tistory.