项目地址 github.com/nnethercote/dhat-rs。
堆分析器是使用一个全局的分配器来实现的,它跟踪了系统的内存分配器,跟踪了所有的堆分析,并且在程序退出的额时候写入文件,输出的文件可以使用 DHAT 的查看器阅读。
嵌入解析器
首先追加配置到 Cargo.toml
文件中,这里使用 features
来配置, 这样在可以控制是否运行。
[dependencies]
dhat = "0.32"
[profile.release]
debug = 1
[features]
dhat-heap = []
在 main.rs
文件中创建。
#[cfg(feature = "dhat-heap")]
#[global_allocator]
static ALLOC: dhat::Alloc = dhat::Alloc;
// ...
func main() {
#[cfg(feature = "dhat-heap")]
let _profiler = dhat::Profiler::new_heap();
// ...
}
运行与解析
运行的时候追加 features
cargo run --features dhat-heap
程序退出的时候会输出类似于下面的内容
....
dhat: Total: 1,256 bytes in 6 blocks
dhat: At t-gmax: 1,256 bytes in 6 blocks
dhat: At t-end: 1,256 bytes in 6 blocks
dhat: The data has been saved to dhat-heap.json, and is viewable with dhat/dh_view.html
导出的 dhat-heap.json 可以使用 DHAT 阅读器解析。
- 可以使用由 nnethercote 提供的在线版本 dhat view。
- 使用项目 Valgrind repository 自己编译后使用。
git clone clone https://sourceware.org/git/valgrind.git
了解 DHAT。