10 个版本

0.2.2 2024 年 8 月 13 日
0.2.1 2024 年 8 月 8 日
0.2.0 2024 年 6 月 26 日
0.1.0 2023 年 12 月 3 日
0.0.2 2023 年 11 月 11 日

#206 in 神奇豆

Download history 147/week @ 2024-06-24 13/week @ 2024-07-01 24/week @ 2024-07-15 166/week @ 2024-07-29 320/week @ 2024-08-05 188/week @ 2024-08-12

674 每月下载

Apache-2.0

66KB
884

包含 (ELF exe/lib,81KB) tests/output/fibonacci,(ELF exe/lib,81KB) tests/output/fibonacci-cov,(ELF exe/lib,2KB) tests/output/fibonacci-expected.ll.o

Wasmcov

Wasmcov 包含一个 Rust 库和相关的二进制文件,为 WebAssembly (Wasm) 模块的覆盖分析提供了一系列工具。此工具使您能够在执行 Wasm 模块的同时收集和审查代码覆盖数据。Wasmcov 以其灵活性和与 Wasm 项目的无缝集成而突出,是提高您 Wasm 应用程序标准的有力工具。

如果您想将此方法应用于非 Rust WASM 二进制文件,请参阅我们的 通用指南

安装

通过运行以下命令安装 cargo-wasmcov 命令:

cargo install wasmcov

用法

cargo-wasmcov 为您的 WASM 项目提供了多个子命令,用于构建、运行、测试和生成覆盖报告。

集成覆盖捕获

在使用 cargo-wasmcov 之前,您需要将覆盖捕获功能集成到您的 WebAssembly 项目中

  1. 在您的 Cargo.toml 中将 wasmcov 添加为依赖项

    wasmcov = "0.2"
    
  2. 将以下函数添加到您的 WebAssembly 项目中

    #[cfg(target_family = "wasm")]
    #[no_mangle]
    pub unsafe extern "C" fn capture_coverage() {
        const BINARY_NAME: &str = env!("CARGO_PKG_NAME");
        let mut coverage = vec![];
        wasmcov::minicov::capture_coverage(&mut coverage).unwrap();
        // Invoke a function to preserve the coverage data or use `println!` for debugging.
    }
    

    对于 NEAR 协议项目,在您的智能合约的 lib.rs 中使用此宏

    #[cfg(target_family = "wasm")]
    wasmcov::near::add_coverage!();
    

构建

使用 WASM 覆盖工具构建您的项目

cargo wasmcov build [-- <additional cargo arguments>]

示例

cargo wasmcov build -- --all --target wasm32-unknown-unknown --release

运行

使用 WASM 覆盖运行您的项目

cargo wasmcov run [--near <VERSION>] [-- <additional cargo arguments>]

如果需要,使用 --near 选项指定 NEAR 沙盒版本(例如,1.35.0)。对于 near 项目是必需的。

测试

使用 WASM 覆盖运行测试

cargo wasmcov test [--near <VERSION>] [-- <additional cargo arguments>]

如果需要,使用 --near 选项指定 NEAR 沙盒版本(例如,1.35.0)。对于 near 项目是必需的。

生成覆盖报告

生成覆盖报告

cargo wasmcov report [-- <additional llvm-cov arguments>]

此命令将处理所有收集到的覆盖率数据并为每个目标生成报告。

清理

清理覆盖率数据

cargo wasmcov clean [--all]

使用 --all 标志删除整个 wasmcov 目录内容。

注意

  • 该工具使用每晚的 Rust 工具链进行构建和运行。
  • 覆盖率报告使用 LLVM 覆盖率工具生成。
  • 对于 NEAR 特定项目,您必须使用 --near 选项与 runtest 子命令指定 NEAR 沙盒版本。

许可

此存储库根据 Apache 许可协议(版本 2.0)分发。有关详细信息,请参阅LICENSE

当单独使用 Wasmcov 的解决方案(将 llvm-ir 转换为 .o 文件以进行链接)时,需要注明来源。

维护者

此存储库目前由 Bartosz Barwikowski 管理,他来自 Hacken。它最初由 Noah Jelich 创建,该方法本身是与 Bartosz 共同创建的。请随时提出任何疑问或关注。

贡献

鼓励贡献!使用 cargo build 命令来构建项目。注意:在测试期间,使用 --test-threads=1 标志禁用并行性。这确保环境变量不会受到其他测试的影响。

为了方便起见,可以使用缩写 make buildmake test 分别构建和测试项目。

依赖项

~0–1.7MB
~22K SLoC