我在我的项目中成功使用了 gcov:
- 我可以使用 gcov 标志构建我的项目:
-fprofile-arcs -ftest-coverage
- 我链接
-lgcov
选项 - 我运行我的单元测试程序并生成了很多
gcda
文件gcno
。 - 我运行 gcov 很多次并且
gcov
生成了很多文件。 - 我总结了结果并生成了一个这样的行列表:
#####: 42: virtual double run_time() const { return 0; }
然后我去'doh!并编写一个调用该缺失方法的测试。
上面的示例行很容易诊断 - gcov 告诉我我没有调用的确切方法。
我还有一个由 gcov 标记的复制构造函数的示例,但我可以使用我的 Visual Studio 调试器逐步完成它。那里的解决方案是意识到 gcov 患有 RVO,它忽略了副本,但是编写了一个强制复制的测试来解决这个问题。
我还有其他几个我无法弄清楚的例子:
1.
File.cpp
#####: 78:}
gcov 似乎在标记作为文件最后一行的命名空间的右括号。
2.
File.h
#####: 33: class FooBase: public IResult {
gcov 想在这里告诉我什么?我想不出在这里打个电话。
更新 1:我检测到它FooBase
有一个默认构造函数,就目前而言,如果仅由子类“调用”它与通过实例化它调用它是不同的gcov
。
更新 2:我一直在使用djgpp/gcc 4.4.4
产生上述结果的方法。然而,通过使用MinGW/gcc 4.5.2
“像差”消失,并通过更多的工作,我已经能够达到 100% 的线路覆盖率。
请为粗心的 gcov 用户写下您的答案,或者为我的一个示例提供答案。