我曾使用gcov来测试代码覆盖率,但对于模板化的C++代码而言,效果不是很好。我广泛使用boost::spirit,但gcov似乎会简单地忽略模板化的spirit代码。
此外,我想知道是否有一种覆盖工具可以显示线程之间的交互,找出可能的分支/竞争条件/实际执行的执行流。
我曾使用gcov来测试代码覆盖率,但对于模板化的C++代码而言,效果不是很好。我广泛使用boost::spirit,但gcov似乎会简单地忽略模板化的spirit代码。
此外,我想知道是否有一种覆盖工具可以显示线程之间的交互,找出可能的分支/竞争条件/实际执行的执行流。
TestCocoon 是一个很棒的工具,比 gcov 更好,有很好的工具和报告功能。由于模板是编译时的“野兽”,我不确定您想要获取什么覆盖信息?
我的两分钱
"我们的C++测试覆盖工具可以提供模板体的测试覆盖率,或者至少是您指定要覆盖的文件中定义的那些模板。
它不区分模板的实例化。
如果您有一个多线程应用程序,该工具将记录所有线程执行的分支,如果您配置该工具使用原子可写标志(通常是CPU的自然字大小[32位或64位])。 (如果您不这样做,您可能会遇到线程竞争,在更新覆盖标志时会丢失一些覆盖范围。这不是工具的缺陷;它是未同步访问存储探针数据的后果。)
对于竞态检测,OP需要找到一个竞态检测工具;测试覆盖工具无法完成此任务。
Parasoft CPP测试是一个很好的工具,可以进行各种分析,包括代码覆盖率和静态分析。这对于深入研究多线程也非常有用。
http://www.parasoft.com/jsp/products/cpptest.jsp
这里有10个很好的开源工具,用于代码覆盖率:
https://web.archive.org/web/20181018002302/http://open-tube.com/10-code-coverage-tools-c-c/
我从事大型产品的开发,我们使用了一个叫做 BullsEye 的第三方应用进行覆盖测试,效果非常好。