您对解释gcov输出以提高覆盖率有什么建议?

qua*_*ana 5 c++ gcc gcov

我在项目中成功使用了gcov:

  • 我可以使用gcov标志构建项目: -fprofile-arcs -ftest-coverage
  • 我与-lgcov选项链接
  • 我运行我的单元测试程序,gcda并且gcno产生了许多和文件。
  • 我运行gcov很多次,并且gcov产生了很多文件。
  • 我总结了结果并产生了这样的行列表:
    • #####: 42: virtual double run_time() const { return 0; }

然后我走了!并编写一个调用该缺失方法的测试。

上面的示例行很容易诊断-gcov告诉我我没有调用的确切方法。

我也有一个示例,该示例由gcov标记为复制构造函数,但是我可以使用Visual Studio调试器逐步完成它。那里的解决方案是意识到gcov遭受RVO的困扰,从而使副本无法使用,但是编写了一个测试来强制副本修复该问题。

我还有其他一些我无法弄清楚的例子:

1.
File.cpp
#####: 78:}
Run Code Online (Sandbox Code Playgroud)

gcov似乎在标记名称空间的右括号,该名称空间是文件的最后一行。

2.
File.h
#####: 33:  class FooBase: public IResult {
Run Code Online (Sandbox Code Playgroud)

gcov想在这里告诉我什么?我想不起在这里打电话。
更新1:我发现FooBase有一个默认的构造函数,就子类而言,如果仅由子类“调用”,则与通过实例化它的调用不同gcov

更新2:我一直在使用djgpp/gcc 4.4.4它产生以上结果。但是,通过使用MinGW/gcc 4.5.2“像差”消失以及更多的工作,我已经可以达到100%的线路覆盖率。

请为不熟练的gcov用户写一个提示,或者给出我的示例之一的答案。

osg*_*sgx 2

正如 gcov.c 中所说

  /* For lines which don't exist in the .bb file, print '-' before
     the source line.  For lines which exist but were never
     executed, print '#####' before the source line.  Otherwise,
     print the execution count before the source line.  There are
     16 spaces of indentation added before the source line so that
     tabs won't be messed up.  */
Run Code Online (Sandbox Code Playgroud)

我建议您在尝试获得覆盖范围时使用 gcov 和 VS 的调试版本。