Hug*_*ugo 19 c++ testing code-coverage lcov
我正在尝试将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
Run Code Online (Sandbox Code Playgroud)
但我得到:
整体覆盖率:
线......:100.0%(60行中60个)
函数..:100.0%(26个函数中的26个)
分支...:未找到数据
有任何想法吗?
小智 30
最新版本的LCOV默认禁用分支覆盖.
您需要通过以下任一方式重新启用它:
~/.lcovrc文件(从/ etc/lcovrc复制)将lcov_branch_coverage设置更改为1--rc lcov_branch_coverage=1到您的lcov命令行.lcovrc文件是需要放置在lcov文件路径中的设置文件。坦白说,我对该文件的使用并没有做太多研究。
您需要为所有调用的 lcov添加附加参数“ --rc lcov_branch_coverage = 1” 。在您的情况下,请将此参数添加到所有三个调用中。如果错过一个,它将降低分支机构的覆盖范围。
genhtml也需要--branch-coverage。
抱歉,与其说是一个“想法”,不如说是确认您所做的一切都是正确的。您的确切命令适用于这个简单的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
lcov 覆盖表包含线路、函数和分支的统计信息。也许仔细检查您是否确实看到了正确的输出 HTML?