#error-context #context #panic #error

econtext

快速简单的panic错误上下文

4个版本

0.2.0 2020年6月7日
0.1.2 2020年6月7日
0.1.1 2020年6月7日
0.1.0 2020年6月7日

#745 in 调试

MIT/Apache

10KB
130

econtext:快速简单的panic错误上下文。

调用econtext!宏为线程局部链表添加作用域。如果在作用域激活期间发生panic!(),则将提供给econtext!宏的数据/消息打印出来。

这从而提供了一种可选的带有可选数据的堆栈跟踪(例如函数参数的值)。

这在某些情况下非常有用,例如

  • 打印出错误发生时正在处理的数据
  • 提供类似于堆栈跟踪的内容,当实际堆栈跟踪不可用(例如在某些WASM上下文中)时
  • 打印出更短、更易读的堆栈跟踪,当实际堆栈跟踪过长且复杂时

调用excontext宏的开销在2020年MacBook Pro上大约为15ns。

示例

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");
	}
}

在错误情况下,会打印出类似以下内容

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

没有运行时依赖项