10个版本
0.1.9 | 2022年8月14日 |
---|---|
0.1.8 | 2022年8月14日 |
#1407 in 解析实现
31每月下载次数
在cargo-prof中使用
19KB
381 代码行
Prof
目前处于非常早期的原型阶段,目前仅限于Linux,除非您在已安装valgrind
的docker容器中运行。
旨在将C/C++生态系统的分析工具包装在一个易于使用的CLI中,最终将实现跨平台,提供可读的输出以及json
,可以被管道传输到其他工具,如UI。
快速入门
需求
如果没有安装,程序将打印上述链接。
有两种版本
Cargo
在您的Cargo目标上运行
安装
cargo install cargo-prof
以字节为文本的YAML输出(可读)
cargo prof heap
allocated_total: 2KB 119B
frees: 11
allocations: 11
allocated_at_exit: 0B
blocks_at_exit: 0
以总字节数输出的JSON
cargo prof heap -j
{"allocated_total":2167,"frees":11,"allocations":11,"allocated_at_exit":0,"blocks_at_exit":0}
独立版
在任何二进制文件上运行
安装
cargo install prof
如果rg
在您的path
上,则分析ripgrep
prof leak --bin rg
给ripgrep
一些参数来对其进行压力测试并查看是否有内存泄漏
prof leak --bin rg -- a -uuu
definitely_lost: 0B
indirectly_lost: 0B
possibly_lost: 528B
still_reachable: 369KB 218B
supressed: 0B
definitely_lost_blocks: 0
indrectly_lost_blocks: 0
possibly_lost_blocks: 9
still_reachable_blocks: 89
supressed_blocks: 0
也尝试使用grep
,并注意一些数据泄漏,甚至在单个文件中也是如此
prof leak --bin grep -- a Cargo.toml
definitely_lost: 272B
indirectly_lost: 352B
possibly_lost: 128B
still_reachable: 109KB 490B
supressed: 0B
definitely_lost_blocks: 272
indrectly_lost_blocks: 11
possibly_lost_blocks: 1
still_reachable_blocks: 15
supressed_blocks: 0
其他命令
除了leak
和heap
之外,还有cache
用于来自cachegrind
的缓存缺失,以百分比表示
cargo prof cache
l1i: 0.36
l1d: 3.0
lli: 0.34
lld: 2.6
llt: 1.0
- l1i:一级缓存指令缺失的百分比
- l1d:一级缓存数据缺失的百分比
- lli:最后一级缓存指令缺失的百分比(例如,L3)
- lld:最后一级缓存数据缺失的百分比(例如,L3)
- llt:最后一级总缓存缺失的百分比
您可以使用lstopo
命令查看您的缓存级别的可视化图
有关这些数字含义的更多信息,请参阅官方文档
https://valgrind.org/docs/manual/cg-manual.html
或者,要了解缓存缺失的好描述,请查看Zig的创建者Andrew Kelley的这次精彩演讲:https://vimeo.com/handmadeseattle/practical-data-oriented-design#t=280s
依赖项
~10–14MB
~246K SLoC