#tokio #debugging #stub #programs #expose #opinionated

delouse

delouse will expose opinionated debugging stubs most useful for tokio based async programs

3 releases

0.1.7 Oct 2, 2024
0.1.5 Feb 6, 2024
0.1.4 Feb 2, 2024

#223 in Asynchronous

Download history 109/week @ 2024-08-02 123/week @ 2024-08-09 133/week @ 2024-08-16 88/week @ 2024-08-23 199/week @ 2024-08-30 85/week @ 2024-09-06 115/week @ 2024-09-13 106/week @ 2024-09-20 235/week @ 2024-09-27 147/week @ 2024-10-04 111/week @ 2024-10-11 179/week @ 2024-10-18 100/week @ 2024-10-25 134/week @ 2024-11-01 102/week @ 2024-11-08 171/week @ 2024-11-15

530 downloads per month

MIT license

21KB
246 lines

Using delouse

First, edit your Cargo.toml to add the delouse crate as an optional dependency, and add a new feature ("debug").

[dependencies]
...
delouse = { version = "0", optional = true }
...

[features]
...
debug = ["dep:delouse"]
...

Next, during the startup in your main or similar, put in:

...

async fn main() -> Result<()> {
    #[cfg(feature = "debug")]
    {
        delouse::init().unwrap();
    }

    ...
}

...

Running your program

When building with cargo build or running with cargo run, add an additional --features debug flag to enable delouse.

Using delouse

By default, and due to no toggles existing yet, delouse will bind to 127.0.0.1:7132. The interface is OpenAPI/JSON based, so you can shave that yak how you'd like, but I tend to just use cURL. Here's some commands for bad days:

What Command Platform Restrictions Notes
Rust Stacktrace curl http://localhost:7132/stacktrace/rust | jq -r .stacktrace
ELF Information curl http://localhost:7132/elf/info | jq . Linux 🐧
Request a coredump curl http://localhost:7132/coredump Linux 🐧 Process will exit
Tokio Stacktrace curl http://localhost:7132/stacktrace/tokio | jq -r .stacktrace Linux 🐧, tokio_unstable This endpoint is very flaky. If this locks up tokio's runtime, this will panic the process with the stacktrace.

tokio specific notes

A lot of the surface we need is unstable. The following table is a list of endpoints and required cfg directives.

Endpoint cfgs
stacktrace/tokio tokio_unstable, tokio_taskdump

In the author's very humble opinion, the following .cargo/config.toml settings are encouraged, in the absense of overriding convictions or specific engineering restrictions when running with tokio:

[build]
rustflags = ["--cfg", "tokio_unstable"]

[target.x86_64-unknown-linux-gnu]
rustflags = ["--cfg", "tokio_unstable", "--cfg", "tokio_taskdump"]

If this is not possible, delouse will gracefully degrade and not serve any endpoints which can not be run.

Dependencies

~23–53MB
~1M SLoC