#memory-layout #layout #struct #enums #memory #type

nightly struct_scalpel

memory layout analysis tool for structs, enums, unions, tuples, and references

2 releases

0.1.1 Jul 1, 2023
0.1.0 Jul 1, 2023

#520 in Debugging

38 downloads per month

Custom license

59KB
534 lines

struct_scalpel

Github crates.io License Stars Lines of code


Memory layout analysis tool for rust structs, enums, unions, tuples, and references, prints to console using ansi escape codes.

Simply derive Dissectible and call print_dissection_info to get a well formatted overview.

use struct_scalpel::{Dissectible, print_dissection_info};

#[derive(Dissectible)]
struct Person {
    name: String,
    age: u32,
    is_student: bool,
    height: f64,
    favorite_numbers: Vec<u8>,
}

fn main() {
    print_dissection_info::<Person>();
}

With dissect_std you can even disect some std items, with only a few type path deviations for private types.

  • String
  • Option
  • Result<T, E>
  • Box<T, A: Allocator>
  • Rc
  • cell
    • UnsafeCell
    • Cell
    • RefCell
    • OnceCell
  • sync
    • OnceLock

Disclaimer: This may not work in all cases, such as where some fields are unsized or dependant on a sys (os) implementation

This also works with generics and different layout strategies

Dependencies

~0.5–12MB
~81K SLoC