Skip to content
/ econtext Public

Rust crate for fast and simple error context on panics

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

emilk/econtext

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

econtext: fast and simple error context on panics.

Calling an econtext! macro adds a scope to a thread-local linked list. If there is a panic!() while the scope is active, the data/message provided to the econtext! macro will be printed.

This thus provides an opt-in stack trace with optional data (e.g. the values of function arguments).

This can be very useful, for instance:

  • To print what data was being worked on when an error occurred
  • To provide something similar to a stack trace where a real stack trace is not available (e.g. in some WASM contexts)
  • To print a shorter and more readable stack trace for when the real stack trace is too long and winding.

The overhead of calling an excontext macro is around 15ns on a 2020 MacBook Pro.

Example

use econtext::*;

fn main() {
	econtext::add_panic_hook(); // Ensures econtext is printed on panic
	econtext!("While running"); // Print a message if there is a panic
	run();
}

fn run() {
	econtext_function!(); // Print function name (`run`) if there is a panic
	process("filename.txt");
}

fn process(filename: &str) {
	econtext_function_data!(filename.to_owned()); // Print function name and filename if there is a panic
	for i in 0..10 {
		econtext_data!("i", i); // Print loop index if there is a panic
		assert!(i != 4, "Intentional panic");
	}
}

On error, something like this is printed:

ERROR CONTEXT:
  my_module src/main.rs:17: i 4
  my_module src/main.rs:15: main::process "filename.txt"
  my_module src/main.rs:10: main::run
  my_module src/main.rs:5: While running

About

Rust crate for fast and simple error context on panics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages