9 个版本 (破坏性更新)
0.7.0 | 2020年1月25日 |
---|---|
0.6.0 | 2019年11月30日 |
0.5.0 | 2019年11月17日 |
0.4.0 | 2019年1月19日 |
0.1.1 | 2018年9月16日 |
#121 in 性能分析
每月下载量 7,170
7KB
rust_hawktracer
Rust 对 Hawktracer 分析器的绑定。
这个 crate 提供了简单的、最少的绑定,帮助你分析 Rust 程序。
如果没有通过指定 features=["profiling_enabled"]
来启用分析,代码中的跟踪点将没有任何开销(所有内容都会在编译时移除)。
所需工具
你需要一个外部工具来将捕获的分析数据从二进制格式转换为可以被 chrome:://tracing (或其他客户端)解释的格式。
分析代码
在 Cargo.toml
[dependencies.rust_hawktracer]
version = "0.6"
features=["profiling_enabled"]
如果它附带的绑定与你的平台期望的不匹配,则更改为
features=["profiling_enabled", "generate_bindings"]
在你的 main.rs 中
#[macro_use]
extern crate rust_hawktracer;
use rust_hawktracer::*;
use std::{thread, time};
#[hawktracer(trace_this)]
fn method_to_trace() {
thread::sleep(time::Duration::from_millis(1));
}
fn main() {
let instance = HawktracerInstance::new();
let _listener = instance.create_listener(HawktracerListenerType::ToFile {
file_path: "trace.bin".into(),
buffer_size: 4096,
});
// For a networked listner
// let _listener = instance.create_listener(HawktracerListenerType::TCP {
// port: 12345,
// buffer_size: 4096,
// });
println!("Hello, world!");
{
scoped_tracepoint!(_test);
thread::sleep(time::Duration::from_millis(10));
{
for _ in 0..10 {
scoped_tracepoint!(_second_tracepoint);
thread::sleep(time::Duration::from_millis(10));
}
}
}
}
可视化
我建议使用 hawktracer_converter
,如 此处 所述,使用 cargo install hawktracer-converter
安装。
如果你使用 HawktracerListenerType::ToFile
.\hawktracer-converter.exe --source trace.bin --output trace.json
如果你使用 HawktracerListenerType::TCP
,你可以通过指定 IP:端口作为 --source
参数来监听和捕获跟踪。
.\hawktracer-converter.exe --source 127.0.0.1:12345 --output trace.json
打开一个 Chrome 浏览器,并转到此地址: chrome://tracing/
通过打开上述程序的 trace.json
,你应该能看到类似的内容
需要注意的事项
在 Rust 宏中,我无法创建新的标识符名称。这意味着为了避免警告,跟踪点名称必须以下划线开头,例如:_
,如下所示:scoped_tracepoint!(_my_tracepoint_name)
。
此规则不适用于函数注解。
许可证
根据您的选择,许可协议为以下之一
- Apache 许可证 2.0(《LICENSE-APACHE》或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(《LICENSE》或 http://opensource.org/licenses/MIT)
。
依赖项
约 220KB