chiark / gitweb /
eyre: wip backtrace
[hippotat.git] / src / reporter.rs
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")?;
 }