When I want to test C++ coverage, I can build my program with -fprofile-arcs -ftest-coverage, run all tests, and run gcov to get coverages.
However, when it comes to Rust, I get totally lost. What I want to do is run the following tests(on my Mac), and get coverage of all Rust codes in path components/raftstore
cargo test --package tests --test failpoints cases::test_normal
cargo test --package tests --test failpoints cases::test_bootstrap
cargo test --package tests --test failpoints cases::test_compact_log
From this post, it says firstly run cargo test --no-run, then run kcov. However, when I actually do that, kcov blocks forever.
Then I find something called cargo kcov, who provides --test. However when I run cargo kcov --test failpoints cases::test_normal like what I do in cargo test, I get error
error: cargo subcommand failure
note: cargo test exited with code exit status: 101
error: no test target named `failpoints`
I have tried many ways to figure this out, however, none of them works, so I wonder if I can get some help here.
I know there are other coverage tools like tarpaulin and grcov, I am currently trying those. It is also acceptable if there are neat solutions with those coverage tools. However, I still want to know what is wrong with kcov and cargo-kcov.
According to rustc docs, it's now possible to obtain instrumentation-based code coverage.
The following command generates coverage results. Note that it requires the Rust profiler runtime, which is included by default in
nightly.These results may include mangled symbol names, which can be worked around with rustfilt:
After running tests with this setup there should be one or more
.profrawfiles. If there are multiple, they can be merged with:Coverage information can then be shown with llvm-cov, for instance like described in this section (substitute the names of your crate and test binaries).
There might be issues if the LLVM versions of rustc and llvm-profdata resp. llvm-cov don't match, as noted here.
This answer is based on this section of the rustc book, which offers much more information on code coverage.