LLDB로 Rust 디버깅하기
LLDB란?
GDB와 유사한 저수준 디버거. macOS에서는 GDB 대신 LLDB를 기본으로 사용한다.
Rust용 래퍼인 rust-lldb를 쓰면 Rust 타입을 더 잘 출력해준다.
실행 방법
# Rust 전용 래퍼 (타입 출력 개선)
rust-lldb ./target/debug/my_program
# 또는 직접 lldb
lldb ./target/debug/my_program
주요 단축키
| 명령어 | 설명 |
|---|---|
b main.rs:10 | main.rs 10번째 줄에 브레이크포인트 |
b 10 | 현재 파일 10번째 줄에 브레이크포인트 |
r | 프로그램 실행 (run) |
c | 다음 브레이크포인트까지 계속 실행 (continue) |
n | 다음 줄 실행 (next, 함수 내부 진입 안 함) |
s | 다음 줄 실행 (step, 함수 내부 진입) |
bt | 콜스택 출력 (backtrace) |
p <변수> | 변수 값 출력 (print) |
q | 디버거 종료 (quit) |
변수 출력 (frame variable)
frame variable # 현재 스코프 지역 변수 전체 출력
frame variable self # self 출력
frame variable self.name # self.name 필드 출력
frame variable --show-globals # 전역 변수 포함 출력
frame variable --show-types # 타입 정보 포함 출력
frame variable --show-types --show-values # 타입 + 값 출력
표현식 실행
expr <표현식> # 현재 컨텍스트에서 표현식 평가 및 실행
GDB 사용 시 (Linux)
rust-gdb ./target/debug/my_program
GDB 명령어는 LLDB와 거의 동일하지만 일부 차이가 있다:
info locals→ 지역 변수 (LLDB의frame variable)info breakpoints→ 브레이크포인트 목록delete <번호>→ 브레이크포인트 삭제