LLDB

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.07
조회수
2
버전
v1

LLDB

LLDB(Low Level Debugger)는 클랑(LLVM) 컴파일러 프로젝트의 일환으로 개발된 현대적인 디버깅 도구로, C, C++, Objective-C, Swift 등 LLVM 기반 언어를 위한 고성능 디버거입니다. LLDB는 GDB(GNU Debugger)를 대체하기 위해 설계되었으며, 특히 macOSiOS 개발 환경에서 널리 사용됩니다. LLVM 프로젝트의 일원으로서, LLDB는 컴파일러와 긴밀하게 통합되어 있으며, 최신 언어 기능과 최적화된 디버깅 경험을 제공합니다.

LLDB는 명령줄 기반 디버거이지만, Xcode와 같은 통합 개발 환경(IDE)과도 원활하게 연동되어 개발자가 코드의 실행 흐름을 정밀하게 제어하고 문제를 진단할 수 있도록 지원합니다.


개요

LLDB는 2010년 애플(Apple)이 주도하여 개발을 시작한 오픈소스 디버깅 프레임워크로, GDB의 한계를 극복하고 현대적인 프로그래밍 언어의 복잡한 디버깅 요구를 충족하기 위해 설계되었습니다. LLDB는 C++로 작성되었으며, 모듈화된 아키텍처를 통해 확장성과 유연성을 갖추고 있습니다.

LLDB의 핵심 특징은 다음과 같습니다: - 고속 디버깅: LLVM의 중간 표현(IR)을 활용하여 빠른 심볼 로딩디버그 정보 처리. - 다양한 언어 지원: C, C++, Objective-C, Swift, Rust 등 LLVM 기반 언어를 지원. - 강력한 스크립팅 기능: 파이썬 API를 통해 디버거를 확장하거나 자동화 가능. - IDE 통합: Xcode, VS Code, CLion 등 주요 개발 도구와 통합 지원.


주요 기능

1. 실행 제어

LLDB는 프로그램의 실행을 중단, 재개, 단계별 실행하는 기능을 제공합니다.

  • run 또는 r: 프로그램 실행
  • breakpoint set -n 함수이름: 함수 이름에 브레이크포인트 설정
  • step 또는 s: 한 줄씩 소스 코드 단위로 단계 실행 (함수 내부 진입)
  • next 또는 n: 현재 줄 실행 후 다음 줄로 이동 (함수는 건너뜀)
  • continue 또는 c: 실행을 재개하여 다음 브레이크포인트까지 진행

2. 변수 및 메모리 검사

디버깅 중 변수의 값을 실시간으로 확인하고 수정할 수 있습니다.

  • print 변수이름 또는 p 변수이름: 변수 값 출력
  • [frame variable](/doc/%EA%B8%B0%EC%88%A0/%EB%94%94%EB%B2%84%EA%B9%85%20%EB%8F%84%EA%B5%AC/%EB%B3%80%EC%88%98%20%EB%B0%8F%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EB%B6%84%EC%84%9D/frame%20variable): 현재 스택 프레임의 모든 지역 변수 출력
  • [memory read](/doc/%EA%B8%B0%EC%88%A0/%EB%94%94%EB%B2%84%EA%B9%85%20%EB%8F%84%EA%B5%AC/%EB%B3%80%EC%88%98%20%EB%B0%8F%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EB%B6%84%EC%84%9D/memory%20read) 주소: 특정 메모리 주소의 내용을 읽기
  • [expression](/doc/%EA%B8%B0%EC%88%A0/%EB%94%94%EB%B2%84%EA%B9%85%20%EB%8F%84%EA%B5%AC/%EC%BD%94%EB%93%9C%20%ED%8F%89%EA%B0%80/expression) -- 코드: 현재 컨텍스트에서 임의의 코드를 평가 (예: p x + y)

3. 브레이크포인트 관리

정교한 브레이크포인트 설정과 조건부 중단 기능을 제공합니다.

# 특정 파일의 특정 라인에 브레이크포인트 설정
(lldb) breakpoint set --file main.cpp --line 20

# 조건부 브레이크포인트 (x > 10일 때만 중단)
(lldb) breakpoint set -n myFunction -c "x > 10"

# 명령 자동 실행 (중단 시 변수 출력)
(lldb) breakpoint command add 1
> p x
> continue
> DONE

4. 콜 스택 탐색

함수 호출의 흐름을 추적할 수 있습니다.

  • [bt](/doc/%EA%B8%B0%EC%88%A0/%EB%94%94%EB%B2%84%EA%B9%85%20%EB%8F%84%EA%B5%AC/%EC%8B%A4%ED%96%89%20%ED%9D%90%EB%A6%84%20%EB%B6%84%EC%84%9D/bt) 또는 [thread backtrace](/doc/%EA%B8%B0%EC%88%A0/%EB%94%94%EB%B2%84%EA%B9%85%20%EB%8F%84%EA%B5%AC/%EC%8B%A4%ED%96%89%20%ED%9D%90%EB%A6%84%20%EB%B6%84%EC%84%9D/thread%20backtrace): 현재 스레드의 콜 스택 출력
  • [up](/doc/%EA%B8%B0%EC%88%A0/%EB%94%94%EB%B2%84%EA%B9%85%20%EB%8F%84%EA%B5%AC/%EC%8B%A4%ED%96%89%20%ED%9D%90%EB%A6%84%20%EB%B6%84%EC%84%9D/up) / [down](/doc/%EA%B8%B0%EC%88%A0/%EB%94%94%EB%B2%84%EA%B9%85%20%EB%8F%84%EA%B5%AC/%EC%8B%A4%ED%96%89%20%ED%9D%90%EB%A6%84%20%EB%B6%84%EC%84%9D/down): 스택 프레임을 위/아래로 이동
  • frame info: 현재 프레임의 정보 출력

5. 파이썬 스크립팅

LLDB는 내장 파이썬 인터프리터를 제공하여 디버깅 작업을 자동화할 수 있습니다.

# 예: 모든 브레이크포인트의 위치 출력
for i in range(lldb.target.GetNumBreakpoints()):
    bp = lldb.target.GetBreakpointAtIndex(i)
    print(f"Breakpoint {bp.GetID()}: {bp}")

스크립트는 .lldbinit 파일에 저장하여 디버그 세션 시작 시 자동 로드할 수 있습니다.


LLDB vs GDB

항목 LLDB GDB
기반 프로젝트 LLVM GNU 프로젝트
언어 지원 Swift, Objective-C 강점 C, C++ 중심
성능 빠른 심볼 로딩, 낮은 메모리 사용 상대적으로 느림
확장성 파이썬 API 기반, 모듈화 설계 파이썬/리스프 스크립팅 지원
IDE 통합 Xcode와 원활 통합 다양한 IDE 지원
플랫폼 macOS, Linux, 일부 Windows 크로스플랫폼 (Linux 중심)

LLDB는 특히 SwiftApple 생태계에서 GDB보다 우수한 지원을 제공합니다. Swift의 복잡한 타입 시스템과 옵셔널 처리를 LLDB가 더 정확하게 해석할 수 있습니다.


설치 및 사용

macOS

macOS에서는 Xcode Command Line Tools 설치 시 자동으로 LLDB가 포함됩니다.

xcode-select --install

터미널에서 lldb 명령어를 입력하여 실행할 수 있습니다.

Linux

Ubuntu/Debian 계열에서는 다음과 같이 설치 가능합니다:

sudo apt-get install lldb

사용 예시

# 디버그 가능한 프로그램 컴파일 (디버그 정보 포함)
g++ -g main.cpp -o main

# LLDB 시작
lldb main

# 실행
(lldb) run

# 브레이크포인트 설정 후 재실행
(lldb) breakpoint set --file main.cpp --line 10
(lldb) run


관련 도구 및 통합

  • Xcode: LLDB는 Xcode의 기본 디버거로, GUI를 통해 브레이크포인트 설정, 변수 검사, 콜 스택 탐색이 가능합니다.
  • VS Code: C/C++ 확장에서 LLDB를 백엔드 디버거로 사용 가능 (launch.json 설정 필요).
  • LLDB-MI: Machine Interface 버전으로, IDE에서 사용하기 위한 기계 가독성 인터페이스 제공.

참고 자료 및 관련 문서

LLDB는 현대 소프트웨어 개발, 특히 Apple 플랫폼 및 LLVM 기반 언어에서 필수적인 디버깅 도구로 자리 잡고 있으며, 지속적인 개발과 커뮤니티 지원을 통해 기능이 확장되고 있습니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?