c++ - 这是 lcov 的错误还是对一个函数中的不同命中计数有意义?

标签 c++ linux code-coverage gcov lcov

 10 [ +  - ][ +  - ] :          2 : Conf::~Conf() {}
  11                 :            : 
  12                 :            : 
  13                 :          2 : Conf::Conf( std::string filename, std::string delimiter,
  14                 :            : std::string comment )
  15 [ +  - ][ +  - ]:          2 :: m_Delimiter(delimiter), m_Comment(comment)
  16                 :            : {
  17                 :            :         // Construct a Conf, getting keys and values from given file
  18                 :            : 
  19 [ +  - ][ +  - ]:          4 :         std::ifstream in( filename.c_str() );
             [ +  - ]
  20                 :            : 
  21 [ +  - ][ -  + ]:          2 :         if( !in ) throw File_not_found( filename ); 
             [ #  # ]
  22                 :            : 
  23         [ +  - ]:          2 :         in >> (*this);
  24                 :          2 : }

代码覆盖率报告如上。对于 Conf 类,构造函数的命中数是 2,但是 std::ifstream in( filename.c_str() ); 这行代码的命中数是 4,我认为也应该是 2。 您如何看待此代码覆盖率报告中的不同点击数,这是一个错误吗 lcov 还是有意义?

最佳答案

看起来他们正在计算两项(第 19 行有两行带方括号),并且计数必须显示这两项的总和。为什么编译器将行分成两部分?我不太确定。

就我而言,我实际上删除了分支计数功能以避免处理它。对于像我这样的大型项目来说,它似乎没有用。也许这样做可以消除这种副作用。

关于c++ - 这是 lcov 的错误还是对一个函数中的不同命中计数有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14050831/

相关文章:

java - SonarQube 可配置技术债务

c++ - 为什么 sizeof(std::mutex)==40 (gcc,clang,icc)?

c++ - 在本地修改的按值传递的参数会发生什么情况?

Linux - 网卡的标志配置

c# - Visual Studio 中的部分行代码覆盖率

C++ lcov 到达意外的文件末尾

c++ - 将 N 项插入空 std::map 的复杂性

c++ - 将 c++0x 线程与 gio GCancellable 混合使用是否合法?

linux - openLdap BerkleyDB 编译问题

linux - 这个小黑盒子是什么,我该如何摆脱它?