Expand description

License BSD-2-Clause License MIT AppVeyor CI docs.rs crates.io Download numbers dependency status


Welcome to ebacktrace 🎉

This crate implements a simple error wrapper which captures a backtrace upon creation and can carry an optional textual description of the error.


use ebacktrace::define_error;
use std::fmt::{ self, Display, Formatter };
/// The error kind
#[derive(Debug, Copy, Clone)]
enum ErrorKind {
impl Display for ErrorKind {
    fn fmt(&self, f: &mut Formatter) -> fmt::Result {
        write!(f, "{:#?}", self)
// Define our custom error type
/// A function that will always fail
fn will_fail() -> Result<(), Error<ErrorKind>> {
// Will panic with a nice error
if let Err(e) = will_fail() {
    eprintln!("Error: {:?}", e);
    panic!("Fatal error")


This crate currently has two feature gates:

  • derive_display (enabled by default): Use the Display-trait for Etrace<MyType> using the Debug representation of MyType (instead of the Display representation). This way you can pretty-print the underlying error types without the necessity to manually implement the Display-trait for them.
  • force_backtrace (disabled by default): If force_backtrace is enable, the backtrace is always captured, regardless whether RUST_BACKTRACE is set or not.


Defines a custom error generic $name<E> where E is an arbitrary payload type