项目地址 github.com/nnethercote/dhat-rs

堆分析器是使用一个全局的分配器来实现的,它跟踪了系统的内存分配器,跟踪了所有的堆分析,并且在程序退出的额时候写入文件,输出的文件可以使用 DHAT 的查看器阅读。

阅读文档 https://docs.rs/dhat/latest/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