如何在Rust库crate中对指定单元测试执行cargo flamegraph分析
解决cargo flamegraph分析Rust库单元测试的报错问题
问题背景
有一个Rust库crate utilrs,目录结构如下:
utilrs ├── Cargo.lock ├── Cargo.toml └── src ├── fileprocessor.rs ├── filesplit.rs ├── forwardstar.rs ├── lib.rs ├── persistence.rs └── xmlparser.rs
需要对fileprocessor.rs中tests模块内的split_and_process_file测试做性能分析,但执行命令时持续报错:
- 执行
cargo flamegraph --unit-test -- fileprocessor::tests::split_and_process_file,报错:Error: crate has no automatically selectable target - 执行
cargo flamegraph --unit-test utilrs -- fileprocessor::tests::split_and_process_file,报错:error: no bin target namedutilrs.
系统环境:
| 组件 | 版本 |
|---|---|
| 操作系统 | Windows 10 64位 |
| cargo | cargo 1.65.0-nightly (4ed54cecc 2022-08-27) |
| rustc | rustc 1.65.0-nightly (84f0c3f79 2022-09-03) |
错误原因
- 第一个命令未明确指定库类型测试目标,
cargo flamegraph无法自动识别库crate的测试入口 - 第二个命令错误地将库名
utilrs当作二进制(bin)目标,但utilrs是库crate,不存在对应的bin目标
解决方案
针对库crate的单元测试,需要用--lib参数指定目标为库,再结合测试名称执行:
cargo flamegraph --lib --unit-test -- fileprocessor::tests::split_and_process_file
Windows环境额外注意事项
- 必须以管理员身份运行终端,Windows性能分析工具需要系统级权限才能正常采集数据
- 确保已安装
cargo-flamegraph的依赖:首次使用可能需要安装Windows Performance Toolkit(属于Windows SDK组件),或通过cargo install cargo-flamegraph自动处理依赖 - 先验证测试本身可正常执行:运行
cargo test --lib fileprocessor::tests::split_and_process_file确认测试能通过,再重新执行火焰图命令
内容的提问来源于stack exchange,提问作者Dan0175
相关产品推荐
相关产品推荐

