1 unstable release

0.1.0 Mar 24, 2023

#26 in #scoped


Used in tasktrace

Apache-2.0 OR MIT

18KB
266 lines

scoped-trace

Capture scoped backtraces.

Use Trace::root to define the upper unwinding bound of an execution trace, and Trace::leaf to define its lower bounds (the points at which backtraces are collected). The resulting traces are trees, since a single invocation of Trace::root may have multiple sub-invocations of Trace::leaf.

For example, running this program:

use scoped_trace::Trace;

fn main() {
    let (_, trace) = Trace::root(|| foo());
    println!("{trace}");
}

fn foo() {
    bar();
    baz();
}

fn bar() {
    Trace::leaf();
}

fn baz() {
    Trace::leaf();
}

...will produce an output like:

╼ inlining::main::{{closure}} at example.rs:4:38
  ├╼ inlining::foo at example.rs:9:5
  │  └╼ inlining::bar at example.rs:14:5
  └╼ inlining::foo at example.rs:10:5
     └╼ inlining::baz at example.rs:18:5

License

This project is licensed under the Apache License, Version 2.0, or the MIT license, at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in scoped-trace by you, shall be licensed as MIT and Apache 2.0, without any additional terms or conditions.

Dependencies

~3.5–4.5MB
~89K SLoC