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();
}
...
}
...
When building with cargo build
or running with cargo run
, add an additional
--features debug
flag to enable 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. |
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.