[Rust 공식문서 한국어 정리] ㊸. Rust 디버깅 가이드
[Rust 공식문서 한국어 정리] ㊸. Rust 디버깅 가이드
원문 제목: Debugging rustc — Rustc Development Guide
작성자: Rust Compiler Team
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 문서는 Rust 프로그램과 Rust 컴파일러 자체를 디버깅하는 방법을 설명합니다.
LLDB와 GDB를 사용한 일반적인 디버깅, rust-gdb/rust-lldb 스크립트, 그리고 IDE 연동을 다룹니다.
컴파일러 낮� 티를 디버깅하기 위한 rustc 전용 플래그와, MIR, HIR 단계에서의 디버깅 기법도 포함합니다.
panic 발생 시 백트레이스를 읽는 방법, 그리고 메모리 관련 버그를 찾기 위한 도구들도 중심으로 설명합니다.
Rust 코드의 런타임 동작을 분석하거나 컴파일러 버그를 추적하려는 개발자에게 필수적인 가이드입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① rust-gdb / rust-lldb: Rust용 pretty printer가 포함된 디버거 래퍼 스크립트입니다.
② RUST_BACKTRACE: panic 발생 시 스택 트레이스를 출력하는 환경 변수입니다.
③ DWARF: Rust 바이너리에 포함된 디버깅 심볼 포맷으로, GDB/LLDB가 소스 레벨 디버깅에 사용합니다.
④ rustc -Z flags: 컴파일러 낮� 티 단계를 덤프하거나 특정 단계에서 멈추는 개발자 전용 플래그입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust 바이너리는 기본적으로 DWARF 심볼을 포함합니다.
debug = true 또는 debug = 2가 Cargo.toml의 기본 설정이며, 릴리스 빌드에서는 debug = false가 기본입니다.
릴리스 바이너리를 디버깅하려면 [profile.release]에 debug = true를 추가해야 합니다.
rust-gdb와 rust-lldb는 표준 GDB/LLDB에 Rust 전용 pretty printer를 추가한 래퍼입니다.
Vec, String, Option, HashMap 등의 Rust 타입을 사람이 읽기 쉬운 형태로 출력합니다.
rustup component add rust-src를 설치하면 소스 레벨 스텝 인/아웃이 정확히 동작합니다.
panic 시 백트레이스는 RUST_BACKTRACE=1 또는 RUST_BACKTRACE=full로 활성화합니다.
full은 더 자세한 프레임 정보를 출력하지만, 보통 1로도 충분합니다.
백트레이스의 #[cfg(test)]나 async 함수 프레임은 해석에 주의가 필요하며, 인라인 함수가 생략될 수도 있습니다.
컴파일러 낮� 티 디버깅은 -Z flags를 사용합니다.
rustc -Z ast-json는 AST를, -Z mir-opt-level=0은 MIR 최적화를 비활성화합니다.
rustc -Z unpretty=mir로 MIR을 출력하여, borrow checker 이후의 중간 표현을 확인할 수 있습니다.
메모리 관련 버그는 Miri나 AddressSanitizer로 검출합니다.
Miri는 undefined behavior를 감지하는 인터프리터이며, cargo miri run으로 실행합니다.
AddressSanitizer는 RUSTFLAGS=-Zsanitizer=address와 함께 nightly에서 사용 가능합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
VS Code + CodeLLDB 확장으로 브레이크포인트, 변수 조사, 스택 추적을 시각적으로 수행합니다.
panic 발생 지점을 RUST_BACKTRACE=full로 확인하고, gdb로 해당 지점의 변수 상태를 상세 분석합니다.
unsafe 코드나 FFI 경계는 Miri로 먼저 테스트하여 메모리 안전성 위반을 사전에 차단합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust 디버깅은 rust-gdb/lldb, RUST_BACKTRACE, Miri 등 다양한 도구를 조합하여 수행합니다.
디버그 심볼을 유지하고, pretty printer를 활성화하면 복잡한 타입도 쉽게 분석할 수 있습니다.
메모리 버그는 전통적 디버거보다 Miri나 Sanitizer가 훨씬 효과적입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://rustc-dev-guide.rust-lang.org/debugging.html
CodeLLDB: https://github.com/vadimcn/codelldb
#Rust #Debugging #GDB #LLDB #Miri #Backtrace #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30