Priroda is a step-through debugger for Rust programs running under Miri.
Current focus:
From miri/, install the pinned toolchain and the local cargo-miri command:
./miri toolchain ./miri install
Then build the Miri sysroot and export it for Priroda:
cargo +miri miri setup export MIRI_SYSROOT="$(cargo +miri miri setup --print-sysroot)"
Priroda currently reads MIRI_SYSROOT directly. After setup, run Priroda from miri/priroda/:
cargo run -- ../tests/pass/empty_main.rs
Priroda's CLI tests also need MIRI_SYSROOT. Run them from miri/priroda/:
cargo test
If the CLI tests fail due to mismatched output, you can update the expected output files by running the tests with the --bless flag:
cargo test -- --bless
or
RUSTC_BLESS=1 cargo test
| Command | Description |
|---|---|
Enter, si, stepi | Execute one Miri interpreter step. |
s, step | Step until the displayed source location changes. |
c, continue | Continue until the program finishes or reaches a breakpoint. |
b <path>:<line>, break <path>:<line> | Add a source-location breakpoint. |
l, locals | List source-level locals in the current frame by name. |
p <local>, print <local> | Print one MIR local by numeric id. |
f <alloc> <offset>, follow <alloc> <offset> | Render allocation bytes from an offset, including the full allocation size. |
q, quit | Exit Priroda. |
Immediate values use Miri's Immediate display representation. Indirect locals are rendered as the bytes belonging to the current value range, not as the entire backing allocation:
[01 02 03] [?? ?? ??]
?? means the byte is uninitialized. A value whose runtime size cannot be determined is reported as <unsupported-unsized>.
Pointer/provenance spans are planned as part of the raw byte output, using a compact dump-like marker such as:
[<ptr alloc5+0> 2a 00 00 00]
Automatic pointer following is future work and should be explicit, not part of ordinary value printing. Typed field rendering and dereference/projection-aware printing are also future work.
EOF also exits Priroda cleanly.
Example:
(priroda) break tests/pass/empty_main.rs:3 (priroda) continue