Debug Derived Trait
This is from lower on this page:
https://doc.rust-lang.org/book/ch05-02-example-structs.html
TODO: Make sure you've already talked about
the debug print format {:?}
and !dbg
and how !dbg
takes ownership and then returns
it and prints to stderr
You can't print a struct directly.
struct Widget { alfa: bool } fn main() { let thing = Widget { alfa: true }; println!("thing is {}", thing); }
TODO: Show that error
The {:?}
debug syntax won't work
either.
struct Widget { alfa: bool } fn main() { let thing = Widget { alfa: true }; println!("thing is {:?}", thing); }
TODO: Show the "error[E0277]: Widget
doesn't implement
Debug
" error.
If you add the outter attribute
for debugging with:
#[derive(Debug)]
it'll allow for {:?}
or {:#?}
to output a basic representation of the struct.
(The {:#?}
is the same thing as{:?}
with a little
nicer formatting and is that's shown here)
#[derive(Debug)] struct Widget { alfa: bool } fn main() { let thing = Widget { alfa: true }; println!("thing is {:#?}", thing); }
Using !dbg
Probably you should just show this for the
debuggin stuff instead of {:?}
in
println!()
for the default way to do
debugging. TODO: look into the differences
to see about that, but almost certianly
move the {:?}
to a later section.
NOTE: this isn't showing up on the playground
possibly because only stdout
and not stderr
is returned? Need to look into that.
#[derive(Debug)] struct Widget { alfa: bool } fn main() { let thing = Widget { alfa: true }; dbg!(thing); }
Use dbg! Around Expressions
You can use around expressions. This means
you can do things like this (TODO: figure
out if dbg!
can output on the rust playground.)
fn main() { let alfa = 3; let bravo = 5; let charlie = dbg!(alfa * bravo); println!("charlie is {}", charlie); }