color-backtrace =============== [![Crates.io][crates-badge]][crates-url] [![docs.rs][docs-badge]][docs-url] [![MIT licensed][mit-badge]][mit-url] [![Apache 2.0 licensed][apache-badge]][apache-url] [crates-badge]: https://img.shields.io/crates/v/color-backtrace.svg [crates-url]: https://crates.io/crates/color-backtrace [docs-badge]: https://docs.rs/color-backtrace/badge.svg [docs-url]: https://docs.rs/color-backtrace/ [mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg [mit-url]: LICENSE-MIT [apache-badge]: https://img.shields.io/badge/license-Apache%202.0-blue.svg [apache-url]: LICENSE-APACHE A Rust library that makes panics a little less painful by nicely colorizing them and printing the relevant source snippets. ```toml [dependencies] color-backtrace = { version = "0.5" } ``` To enable it, simply place this code somewhere in your app initialization code: ```rust color_backtrace::install(); ``` If you want to customize some settings, you can instead do: ```rust use color_backtrace::{default_output_stream, BacktracePrinter}; BacktracePrinter::new().message("Custom message!").install(default_output_stream()); ``` ### Features - Colorize backtraces to be easier on the eyes - Show source snippets if source files are found on disk - Print frames of application code vs dependencies in different color - Hide all the frames after the panic was already initiated - Hide language runtime initialization frames ### Reducing transitive dependencies In order to reduce transitive dependencies, you can disable the default enabled `gimli-symbolize` feature by adding a `default-features = false` clause to your `Cargo.toml` dependency entry, e.g.: ```toml [dependencies] color-backtrace = { version = "0.5", default-features = false } ``` This will reduce dependencies from ~50 → ~10. However, you'll pay for it with [inaccurate source info](https://github.com/athre0z/color-backtrace/issues/2) on macOS and Linux ### Usage in tests Unfortunately, defining custom init functions run before tests are started is currently [not supported in Rust](https://github.com/rust-lang/rfcs/issues/1664). Since initializing color-backtrace in each and every test is tedious even when wrapping it into a function, I recommended using the [ctor](https://crates.io/crates/ctor) crate for this. Somewhere, preferably in your crate's main module, put the following code: ```rust #[cfg(test)] mod tests { use ctor::ctor; #[ctor] fn init_color_backtrace() { color_backtrace::install(); } } ``` You can also do this outside of a `#[cfg(test)]` section, in which case the panic handler is installed for both test and regular runs. ### Screenshot ![Screenshot](https://i.imgur.com/jLznHxp.png)