我正在尝试将lcov用于代码覆盖率指标,但我无法让分支覆盖率工作。
以下是我如何使用它:
g++ -ggdb3 --coverage src/read.c tests/test.cpp -o bin/test
lcov --zerocounters --directory $PWD
lcov --capture --initial --directory $PWD --output-file coverage_output
./bin/test
lcov --no-checksum --directory $PWD --capture --output-file coverage_output
genhtml --branch-coverage --highlight --legend --output-directory out coverage_output
但我明白了:
总体覆盖率:
线......:100.0%(60行60中)
功能..:100.0%(26个功能中的26个)
分支......:没有找到数据
任何想法?
答案 0 :(得分:24)
默认情况下,最新版本的LCOV禁用分支覆盖。
您需要通过以下任一方式重新启用它:
.lcovrc
文件(从/ etc / lcovrc复制)以将lcov_branch_coverage
设置更改为1 --rc lcov_branch_coverage=1
添加到您的lcov命令行答案 1 :(得分:5)
.lcovrc文件是需要放在lcov文件路径中的设置文件。坦率地说,我没有对这个文件的使用进行过多研究。
您需要添加其他参数作为" - rc lcov_branch_coverage = 1"为所有电话lcov 。在您的情况下,将此参数添加到您的所有三个调用。如果你错过了一个,它将会降低分支覆盖范围。
genhtml还需要--branch-coverage。
答案 2 :(得分:1)
对不起,不是一个“想法”,而是确认你正确地做了一切。您的确切命令适用于这个简单的代码:
#include <iostream>
using namespace std;
bool foo(int i)
{
if (i != 0) {
return 12 / i;
} else {
return 0;
}
}
int main(int argc, char** argv)
{
cout << foo(argc) << endl;
return 0;
}
lcov coverage表包含Lines,Functions和Branches的统计信息。也许仔细检查你是否真的在查看正确的输出HTML?
答案 3 :(得分:0)
基于此post,差异可能取决于您使用的gcc版本。你能分享你正在使用的版本吗? 我没有得到分支机构的报道:
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)