ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LLDB - 개념 및 소개
    LLDB 2021. 4. 16. 17:09

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

    오늘부터 LLDB를 부셔보겠습니다!! 이번 포스팅은 LLDB란 간략히 무엇인지 왜 사용하는것인지? 개념 및 소개를 하겠습니다🧑🏻‍💻

    LLDB?

     - Low-Level Debugger라는 뜻으로 LLVM의 디버거 컴포넌트를 개발하는 애플의 서브 프로젝트

     - 로우레벨 컨트롤 가능한 모듈로 이뤄져있으며 기계어에 가까운 영역까지 디버깅 가능 (C/C++/Object-C/Swift 지원)

     - Xcode의 기본 디버거로 내장

     - 차세대 고성능 디버거!?

     - Clang식 파서 및 LLVM 디스어셈블러와 같은 LLVM 프로젝트의 기본 라이브러리를 활용한 재사용 가능한 컴포넌트 집합으로 빌드됨

     - 실제 프로그램이 어떻게 동작하는지 이해가 쉬워짐

     - LLVM의 프론트엔드에 대응하는 디버거로 간결하고 명확한 에러메시지의 장점

     - 문법적 오류와 논리적 오류 중 런타임 시 일어나는 논리적 오류를 잡는것이 목표

     - Xcode 외에도 실행된 프로세스에서 연결하려면 터미널에서 lldb -n "프로세스앱이름" 으로 사용하면된다.

     

     -> 정리하자면, 손쉽게 버그를 추적하고 매번 빌드를 하여 테스트를 해보는 런타임 시간을 줄이기 위해 LLDB를 사용한다😃

    LLVM?

     - Low-Level Virtual Machine라는 뜻으로 컴파일러의 기반구조 (컴파일타임/링크타임/런타임) 상황에서 프로그램의 최적화를 쉽게 구현할 수 있도록 구성

     - 애플에서 컴파일에 필요한 툴체인 개발 프로젝트

     - 컴포넌트들의 재사용성을 위한 훌륭한 모듈화👍🏻

     - LLVM 프로젝트에서 LLVM 라이선스를 가지는 프론트엔드 개발을 위해 Clang을 개발 프로젝트중

       -> 이유는 LLVM의 프론트엔드를 GCC 기반으로 사용할때 프론트엔드를 GPL로 배포해야함으로..

     

     -> 핵심은 중간표현으로 어셈블리어와 비슷한 로우레벨 프로그래밍 언어

    Clang?

     - C/C++/Object-C 언어를 위한 컴파일러 프론트엔드 (LLVM은 백엔드)

     - GNU 컴파일러 모음 (GCC)를 대체하는것이 목표인 프로젝트

    GPL?

     : GNU 일반 공중 사용 허가서 (GNU General Public License, GNU GPL 또는 GPL)라는 뜻으로 자유 소프트웨어 재단에서 만든

    라이선스

    LLDB START🎬

     - Xcode에서 breakpoint를 설정하거나 일시정지 시키면 LLDB 콘솔이 우측하단 디버그 콘솔에 나타남

     

    [느낀점]

    이렇게 LLDB에 대해 왜 탄생하게되었고 무슨 이점이 있는지 알아보았다.

    토이프로젝트야 워낙 조그매서 빌드를 여러번 해도 상관이 없다만.. 회사에서 사용하는 큰 프로젝트 같은 경우 매번 빌드를 한다면

    빌드될때마다 몇십분이 걸릴텐데.. 테스트의 시간을 LLDB 사용을 확실히 알고 있다면 줄일 수 있다. 즉 디버깅 스킬이 늘어난다고 생각된다.

    LLDB가 지금은 빌드해서 프린트문을 찍어보는게 편하겠지만 나중에는 확실히 더 편해질거라고 생각하며 LLDB 격파하기에 도전해보자😁

     

    [참고자료]

    https://ko.wikipedia.org/wiki/LLVM

    https://lldb.llvm.org

    https://iosdevkor.github.io/let_us_go_2018_fall_review/

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

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

    'LLDB' 카테고리의 다른 글

    LLDB (5) - 오픈소스 스크립트 (Derek Selander)  (0) 2021.04.21
    LLDB - 명령어 (4)  (0) 2021.04.20
    LLDB - 명령어 (3)  (2) 2021.04.19
    LLDB - 명령어 (2)  (0) 2021.04.17
    LLDB - 명령어 (1)  (0) 2021.04.16
Designed by Tistory.