#call-stack #graph #visualize #trace #produces #recursion #nice-looking

spannify

A crate that produces nice-looking graphs to visualize your callstack

8 releases

0.2.5 Jan 29, 2025
0.1.5 Aug 2, 2024
0.1.2 Jul 31, 2024
0.0.2 Jul 29, 2024

#1261 in Data structures

Download history 1/week @ 2024-12-09 126/week @ 2025-01-27 13/week @ 2025-02-03

139 downloads per month

MIT license

29KB
496 lines

Spannify

Build status Crates.io License

A tiny rust crate that produces nice-looking graphs for you to visualize your callstack

Spannify does not have any dependencies

Example

Here's an example of using spannify to trace calls to a recursive function.

Make sure you've added spannify to your project:

$ cargo add spannify

main.rs contents:

use spannify::{config::Config, core::StdoutSpanner, spf};
use std::sync::LazyLock;

static SPANNER: LazyLock<StdoutSpanner> =
    LazyLock::new(|| StdoutSpanner::new().with_config(Config::new().with_skip(1)));

fn fib(n: usize) -> usize {
    let _span = spf!(SPANNER, "fib({n})");
    match n {
        0 => 0,
        1 | 2 => 1,
        _ => fib(n - 1) + fib(n - 2),
    }
}

fn main() {
    fib(5);
}

Output

┌fib(5)
| ┌fib(4)
| ¦ ┌fib(3)
| ¦ ┆ ┌fib(2)
| ¦ ┆ └fib(2)
| ¦ ┆ ┌fib(1)
| ¦ ┆ └fib(1)
| ¦ └fib(3)
| ¦ ┌fib(2)
| ¦ └fib(2)
| └fib(4)
| ┌fib(3)
| ¦ ┌fib(2)
| ¦ └fib(2)
| ¦ ┌fib(1)
| ¦ └fib(1)
| └fib(3)
└fib(5)

This and other examples can be found in the examples directory

Documentation

Check out the full documentation at docs.rs

No runtime deps