我在项目中成功使用了gcov:
-fprofile-arcs -ftest-coverage-lgcov选项链接gcda并且gcno产生了许多和文件。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用户写一个提示,或者给出我的示例之一的答案。
正如 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 的调试版本。