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

delouse

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

2 releases

0.1.5 Feb 6, 2024
0.1.4 Feb 2, 2024

#291 in Asynchronous

Download history 25/week @ 2024-02-02 4/week @ 2024-02-09 35/week @ 2024-02-16 64/week @ 2024-02-23 11/week @ 2024-03-01 11/week @ 2024-03-08 7/week @ 2024-03-15 21/week @ 2024-03-22 26/week @ 2024-03-29 8/week @ 2024-04-05

64 downloads per month

MIT license

20KB
246 lines

[!WARNING] This package is up and public, but currently broken due to issue #1.

Using delouse

First, edit your Cargo.toml to add the delouse crate as an optional dependnecy, 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–37MB
~681K SLoC