chiark / gitweb /
eyre: wip backtrace
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Aug 2021 15:41:57 +0000 (16:41 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Aug 2021 15:59:22 +0000 (16:59 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Cargo.lock
Cargo.toml
src/reporter.rs

index 32c7cbdd45af893e2c4800fe308f1730ae597df3..98af578ed4627d2f98fb486567cb017a412f44a2 100644 (file)
@@ -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"
index a86ae567a600ab64ff560db99a8e2ce6faa433cb..0649f6e313f1fe3370e622cfc38cc9ab85611b4f 100644 (file)
@@ -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"
index dc6f432cd5a02c920c456e62c6a4f6103267ff3c..29bf1cc340a94f121d4145c6d4fa9846471efe72 100644 (file)
@@ -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")?;
 }