From 828522c8a81e4400109720e0b6aaa7a27ce593ad Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 7 Aug 2021 16:41:57 +0100 Subject: [PATCH] eyre: wip backtrace Signed-off-by: Ian Jackson --- Cargo.lock | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/reporter.rs | 12 ++++++++-- 3 files changed, 73 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 32c7cbd..98af578 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "aho-corasick" version = "0.7.18" @@ -37,6 +52,21 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +[[package]] +name = "backtrace" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.13.0" @@ -334,6 +364,12 @@ dependencies = [ "wasi", ] +[[package]] +name = "gimli" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" + [[package]] name = "h2" version = "0.3.3" @@ -381,6 +417,7 @@ dependencies = [ name = "hippotat" version = "0.0.0" dependencies = [ + "backtrace", "base64", "cervine", "configparser", @@ -597,6 +634,16 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + [[package]] name = "mio" version = "0.7.13" @@ -656,6 +703,15 @@ dependencies = [ "libc", ] +[[package]] +name = "object" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55827317fb4c08822499848a14237d2874d6f139828893017237e7ab93eb386" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.8.0" @@ -879,6 +935,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "rustc-demangle" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dead70b0b5e03e9c814bcb6b01e03e68f7c57a80aa48c72ec92152ab3e818d49" + [[package]] name = "schannel" version = "0.1.19" diff --git a/Cargo.toml b/Cargo.toml index a86ae56..0649f6e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,7 @@ hippotat-macros = { path = "macros" } # versions specified here are mostly just guesses at what is needed # (or currently available): +backtrace = "0.3" base64 = "0.13" configparser = "2" env_logger = "0.9" diff --git a/src/reporter.rs b/src/reporter.rs index dc6f432..29bf1cc 100644 --- a/src/reporter.rs +++ b/src/reporter.rs @@ -103,7 +103,12 @@ impl<'r> Reporter<'r> { } } -struct EyreDedupHandler; +use backtrace::Backtrace; + +struct EyreDedupHandler { + backtrace: Backtrace, +} + type EyreDynError<'r> = &'r (dyn std::error::Error + 'static); impl eyre::EyreHandler for EyreDedupHandler { @@ -119,6 +124,9 @@ impl eyre::EyreHandler for EyreDedupHandler { #[throws(AE)] pub fn dedup_eyre_setup() { - eyre::set_hook(Box::new(|_error| Box::new(EyreDedupHandler))) + eyre::set_hook(Box::new(|_error| { + let backtrace = Backtrace::new_unresolved(); + Box::new(EyreDedupHandler { backtrace }) + })) .context("set error handler")?; } -- 2.30.2