원문 캡처 · github.com
원문 캡처 · github.com

pry-rs는 Rust 코드에 pry!()를 넣어 실행을 멈추고, 대화형 프롬프트에서 지정한 변수와 표현식, 주변 소스 코드, 백트레이스를 확인하는 REPL이다. 확인을 마치면 실행을 이어갈 수 있다.

Rust는 런타임 리플렉션을 지원하지 않으므로 pry!에 살펴볼 변수나 표현식을 직접 지정해야 한다. Debug를 구현한 값이면 캡처할 수 있다. 프롬프트는 rustyline을 이용해 줄 편집과 명령 기록을 지원하며, 기본 의존성은 rustyline 하나다. default-features = false를 설정하면 std만 사용하는 빌드도 가능하다.

설치는 다음과 같이 저장소를 의존성으로 추가한다.

toml
[dependencies]
pry-rs = { git = "https://github.com/100010/pry-rs" }

사용 예시는 다음과 같다.

rust
use pry::pry;

#[derive(Debug)]
struct User {
 name: String,
 age: u32,
}

fn main() {
 let user = User { name: "alice".into(), age: 30 };
 let scores = [88, 92, 75];

 pry!(user, scores, scores.len()); // ← execution pauses here

 println!("resumed!");
}

ls는 캡처한 변수를 나열하고, 변수 이름을 입력하면 {:?} 형식으로 출력한다. user.name이나 items[0].id처럼 하위 필드에 접근할 수 있고, p <name>은 {:#?} 형식으로 보기 좋게 출력한다. whereami는 중단점 주변 소스를, bt는 백트레이스를 표시한다. continue 또는 c로 실행을 재개하고, exit 또는 quit으로 프로그램을 종료한다. help 또는 h는 명령 안내를 보여준다.

값은 pry!가 실행되는 순간 Debug 출력으로 캡처된다. 따라서 REPL에서 보는 것은 스냅샷이며 프로그램 상태를 바꿀 수 없다. 하위 필드 접근은 캡처된 Debug 텍스트를 파싱해 작동한다. #[derive(Debug)]의 출력은 안정적으로 파싱되지만, 직접 작성한 특이한 Debug 구현은 그렇지 않을 수 있다. 전체 백트레이스를 보려면 RUST_BACKTRACE=1로 실행해야 한다.

Rust 1.76 이상이 필요하다. 표준 출력이 터미널이 아니거나 NO_COLOR가 설정된 경우 색상은 자동으로 비활성화된다. 예제는 cargo run --example basic으로 실행하며, 라이선스는 MIT다. 입력 편집 라이브러리 rustyline을 사용한다.