Crate si_trace_print
source ·Expand description
Macros for printing stack-indented trace-like print statements.
Library users should use macros provided in printers
(which are
also listed here).
use si_trace_print::{
den, deo, dex, defn, defo, defx,
};
fn main() {
den!("hello from main");
deo!("main will be doing stuff...");
func1(3);
deo!("main is done doing stuff.");
dex!("goodbye from main");
}
fn func1(_var: usize) {
defn!("({:?})", _var);
defo!("doing even more stuff...");
defx!();
}
this should print to stderr
$ cargo run
→hello from main
main will be doing stuff...
→func1: (3)
func1: doing even more stuff...
←func1:
main is done doing stuff.
←goodbye from main
An example using a variety of the available println macros. These compile into debug and release builds and print to stdout.
extern crate si_trace_print;
use si_trace_print::{pf1n, pf2n, pfn, pn, po, px};
fn main() {
pn!("hello from main");
pfn!("hello again from main");
pf1n!("hello again from main!");
pf2n!("HELLO AGAIN FROM MAIN!!!");
po!("main will be doing stuff...");
mod1::mod2::func1(3);
po!("main is done doing stuff...");
px!("goodbye from main");
}
mod mod1 {
pub mod mod2 {
use si_trace_print::{
pf1n, pf1o, pf1x, pf1ñ, pf2n, pf2o, pf2x, pf2ñ, pfn, pfo, pfx, pfñ, pñ,
};
pub fn func1(var: usize) {
pf1n!("({:?})", var);
pf1o!("func1 calling func2...");
func2(var + 1);
pf1x!("({:?})", var);
}
fn func2(var: usize) {
pf2n!("({:?})", var);
pf2o!("calling func3...");
func3();
pf2x!("({:?})", var);
}
fn func3() {
pfn!();
func4();
pfo!("almost complete...");
pfx!();
}
fn func4() {
pñ!("func4 is a short function.");
pfñ!("func4 is a short function.");
pf1ñ!("func4 is a short function.");
pf2ñ!("func4 is a short function.");
}
}
}
should print to stdout
→hello from main
→main: hello again from main
→main: hello again from main!
→main: HELLO AGAIN FROM MAIN!!!
main will be doing stuff...
→mod2::func1: (3)
mod2::func1: func1 calling func2...
→mod1::mod2::func2: (4)
mod1::mod2::func2: calling func3...
→func3:
↔func4 is a short function.
↔func4: func4 is a short function.
↔mod2::func4: func4 is a short function.
↔mod1::mod2::func4: func4 is a short function.
func3: almost complete...
←func3:
←mod1::mod2::func2: (4)
←mod2::func1: (3)
main is done doing stuff...
←goodbye from main
Modules
Macros to derive the current function name.
Macros to print trace statements with stack offset indentation.
Functions to store a stack offset for indented trace prints and
return the appropriate preprint
str
.Macros
debug eprintln!
debug eprintln! in a function plus one namespace level when
entering.
debug eprintln! in a function plus one namespace level
with offset.
debug eprintln! in a function plus one namespace level when
exiting.
debug eprintln! in a function with one namespace levels when
entering and exiting.
debug eprintln! in a function plus two namespace levels
when entering.
debug eprintln! in a function plus two namespace levels
with offset.
debug eprintln! in a function plus two namespace levels
when exiting.
debug eprintln! in a function plus two namespace levels
when entering and exiting.
debug eprintln! in a function when entering.
debug eprintln! in a function with offset.
debug eprintln! in a function when exiting.
debug eprintln! in a function when entering and exiting.
debug eprintln! when entering.
debug eprintln! with offset.
debug eprintln! when exiting.
debug eprintln! when entering and exiting.
debug println!
debug println! in a function plus one namespace level when
entering.
debug println! in a function plus one namespace level with
offset.
debug println! in a function plus one namespace level when
exiting.
debug println! in a function plus one namespace level when
entering and exiting.
debug println! in a function plus two namespace levels when
entering.
debug println! in a function plus two namespace levels with
offset
debug println! in a function plus two namespace levels when
exiting.
debug println! in a function plus two namespace levels when
entering and exiting.
debug println! in a function when entering.
debug println! in a function with offset.
debug println! in a function when exiting.
debug println! in a function when entering and exiting.
debug println! when entering.
debug println! with offset.
debug println! when exiting.
debug println! when entering and exiting.
eprintln!
eprintln! in a function plus one namespace level
when entering.
eprintln! in a function with one namespace levels and
offset.
eprintln! in a function plus one namespace level
when exiting.
eprintln! in a function plus one namespace level
when entering and exiting.
eprintln! in a function plus two namespace levels
when entering.
eprintln! in a function with two namespace levels and
offset.
eprintln! in a function plus two namespace levels
when exiting.
eprintln! in a function plus two namespace levels
when entering and exiting.
eprintln! in a function when entering.
eprintln! in a function with offset.
eprintln! in a function when exiting.
eprintln! in a function when entering and exiting.
eprintln! when entering.
eprintln! with offset.
eprintln! when exiting.
eprintln! when entering and exiting.
Return the current the current function name as a
&'static str
,
e.g. "my_func"
.Return the current current function name full path as a
&'static str
,
e.g. "my_lib::my_mod::my_func"
.Return the current function name plus preceding namespaces as a
&'static str
.println!
println! in a function plus one namespace level when
entering.
println! in a function plus one namespace level with
offset.
println! in a function plus one namespace level when
exiting.
println! in a function plus one namespace level when
entering and exiting.
println! in a function plus two namespace levels when
entering.
println! in a function plus two namespace levels with
offset.
println! in a function plus two namespace levels when
exiting.
println! in a function plus two namespace levels when
entering and exiting.
println! in a function when entering.
println! in a function with offset.
println! in a function when exiting.
println! in a function when entering and exiting.
println! when entering.
println! with offset.
println! when exiting.
println! when entering and exiting.