1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2018年9月11日 |
---|
#57 在 #real
用于 trace2
18KB
369 行代码(不含注释)
trace2
一个用于跟踪Rust语言中函数执行的进程宏(nightly版本)。
功能类似于trace crate,但它是线程安全的,并使用log,以便您可以有更多的控制。此外,与trace不同,您不需要声明任何静态变量。只需添加属性到您想要跟踪的部分即可 它就正常工作™。
用法
-
将依赖项添加到您的
Cargo.toml
trace2 = "0.1"
-
导入crate
#![feature(use_extern_macros)] // Not needed if your rustc is recent enough. extern crate trace2;
-
将
#[::trace2::trace2]
属性添加到函数、impl块或mod块中。向mod添加跟踪需要启用
proc_macro_mod
功能的最新Rust nightly编译器。
示例
跟踪特定函数
examples/basic.rs:通过向函数添加trace2属性来跟踪指定函数。
#![feature(use_extern_macros)]
#![feature(proc_macro_path_invoc)]
extern crate trace2;
#[macro_use]
extern crate log;
extern crate env_logger;
#[::trace2::trace2]
fn foo(a: i32, b: i32) {
println!("I'm in foo!");
bar((a, b));
}
#[::trace2::trace2]
fn bar((a, b): (i32, i32)) -> i32 {
println!("I'm in bar!");
if a == 1 {
2
} else {
b
}
}
fn main() {
env_logger::Builder::from_default_env()
.default_format_module_path(false)
.init();
foo(1, 2);
}
输出
TRACE 2018-09-06T17:06:54Z: >>>> basic::foo(a: 1, b: 2)
I'm in foo!
TRACE 2018-09-06T17:06:54Z: >>>>>>>> basic::bar(a: 1, b: 2)
I'm in bar!
TRACE 2018-09-06T17:06:54Z: <<<<<<<< basic::bar = 2
TRACE 2018-09-06T17:06:54Z: <<<< basic::foo = ()
跟踪整个impl块
examples/impl_level.rs:通过向impl块添加trace2属性来跟踪impl块中的所有函数。
#![feature(use_extern_macros)]
#![feature(proc_macro_path_invoc)]
extern crate trace2;
#[macro_use]
extern crate log;
extern crate env_logger;
struct Foo;
#[trace2::trace2]
impl Foo {
fn foo(b: i32) -> i32 {
b
}
fn bar(&self, a: i32) -> i32 {
a
}
fn boz(&self, a: i32) -> i32 {
self.bar(a)
}
}
fn main() {
env_logger::Builder::from_default_env()
.default_format_module_path(false)
.init();
let foo = Foo;
Foo::foo(2);
foo.bar(7);
foo.boz(13);
}
输出
TRACE 2018-09-11T07:05:59Z: >>>> impl_level::Foo::foo(b: 2)
TRACE 2018-09-11T07:05:59Z: <<<< impl_level::Foo::foo = 2
TRACE 2018-09-11T07:05:59Z: >>>> impl_level::Foo::bar(a: 7)
TRACE 2018-09-11T07:05:59Z: <<<< impl_level::Foo::bar = 7
TRACE 2018-09-11T07:05:59Z: >>>> impl_level::Foo::boz(a: 13)
TRACE 2018-09-11T07:05:59Z: >>>>>>>> impl_level::Foo::bar(a: 13)
TRACE 2018-09-11T07:05:59Z: <<<<<<<< impl_level::Foo::bar = 13
TRACE 2018-09-11T07:05:59Z: <<<< impl_level::Foo::boz = 13
在examples目录中查看更多示例。
待办事项
- 支持输出嵌套跟踪属性的impl类型
- 支持暂停
许可证
MIT
依赖项
~2MB
~47K SLoC