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);
}