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 调试
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