async-backtrace
Efficient, logical 'stack' traces of async functions.
Usage
To use, annotate your async functions with #[async_backtrace::framed],
like so:
async
async
async
async
async
async
async
This example program will print out something along the lines of:
╼ taskdump::foo::{{closure}} at backtrace/examples/taskdump.rs:20:1
└╼ taskdump::bar::{{closure}} at backtrace/examples/taskdump.rs:25:1
├╼ taskdump::buz::{{closure}} at backtrace/examples/taskdump.rs:35:1
│ └╼ taskdump::baz::{{closure}} at backtrace/examples/taskdump.rs:40:1
└╼ taskdump::fiz::{{closure}} at backtrace/examples/taskdump.rs:30:1
╼ taskdump::pending::{{closure}} at backtrace/examples/taskdump.rs:15:1
Minimizing Overhead
To minimize overhead, ensure that futures you spawn with your async runtime
are marked with #[framed].
In other words, avoid doing this:
spawn.await;
async
async
...and prefer doing this:
spawn.await;
async
async
Estimating Overhead
To estimate the overhead of adopting #[framed] in your application, refer
to the benchmarks and interpretive guidance in
./backtrace/benches/frame_overhead.rs. You can run these benchmarks with
cargo bench.
License
This project is licensed under the MIT license.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in async-backtrace by you, shall be licensed as MIT, without any additional terms or conditions.