下面是我的代码的LCOV报告:
83 : 84 : uint8_t a = 0;
84 [ + - ]: 84 : ret = check_uint(section, VALUE, &a);
85 [ + + ]: 84 : if (success != ret) {
86 [ + - ][ + - ]: 1 : std::cout << "a read from section. returned Error" << endl;
87 : 1 : return ret;
88 : : }在第86行,(-)未采用其显示分支5,但ret的可能性为2(成功或失败)。谁能向我澄清一下lcov分支机构覆盖率报告中的确切含义(分支5未被采用)?
发布于 2021-09-13 15:03:24
简而言之,lcov与分支的交互,特别是与内联调用的交互,可以找到代码中一些隐藏的分支,这些分支是您无法控制的。
例如,编译器可以有效地内联模板化函数( std::cout << "foo"就是其中之一)。这意味着编译器也可以看到该代码中存在的任何分支。当然,这可以让编译器进行更彻底的优化。这就是您在这里看到的分支。它不是在您编写的代码中,而是在代码中为您实例化的模板。
特别是,basic_ostream上的大多数格式化输出函数将确保流在执行格式化或插入工作之前处于良好状态。
当我做分支分析时,我倾向于忽略像这样的函数上的分支遗漏。在C++中有几个类似的地方,其中分支由gcov/lcov检测,但仅是实现细节。我试着把注意力集中在我控制的分支上。
https://stackoverflow.com/questions/69164635
复制相似问题