【问题标题】:What's the best C++ code coverage tool that works with templates?与模板一起使用的最佳 C++ 代码覆盖率工具是什么?
【发布时间】:2023-09-24 19:48:01
【问题描述】:

我使用 gcov 来测试代码覆盖率,但是当涉及到模板化的 c++ 代码时,它就不能很好地工作了。我广泛使用 boost::spirit,而 gcov 似乎只是忽略了模板化的精神代码。

我还想知道是否有一个覆盖工具来显示线程如何相互交互,精确定位可能的分支/竞争条件/实际执行的执行流程。

【问题讨论】:

  • @TomalakGeret'kal:代码覆盖率?
  • @TomalakGeret'kal 测试代码覆盖率
  • 有大量模板代码在编译时进行评估。 “代码覆盖率”对此意味着什么?正常的代码覆盖率是在运行时确定的。
  • @MSalters:我认为运行时部分的代码覆盖率,但我从未见过可以为模板的 each 实例指明这一点的工具。我想有一个内联问题......

标签: c++ multithreading templates code-coverage gcov


【解决方案1】:

TestCocoon 是一个很好的尝试工具,比 gcov 更好的工具和报告功能。由于模板是编译时的野兽,我不确定您想要获得哪些覆盖信息?

我的两分钱

【讨论】:

  • Testwell CTC++ 也是一个不错的选择,它有很好的 HTML 报告,支持每个编译器,适用于每个嵌入目标。
  • @B_PRIEUR:我不知道。 testcocoon 当时是免费的。我不知道 Testwell 产品,但看起来很专业。将其添加到答案中...
  • 是的,它很专业,我不认为它添加了这么多信息,版主也不太喜欢工具答案:p
【解决方案2】:

我在开发一个大型产品,我们使用名为 BullsEye 的第三方应用进行覆盖率测试。效果很好。

【讨论】:

    【解决方案3】:

    我们的C++ Test Coverage 工具提供了对模板主体的测试覆盖率,或者至少是在您指定的文件中定义的那些模板以使其覆盖。

    它不区分模板的实例化。

    如果您有一个多线程应用程序,该工具将记录所有线程执行的分支,如果您将该工具配置为使用原子可写的标志(通常是 CPU 的自然字长 [32 或 64 位] .(如果你不这样做,你可能会在更新覆盖标志时出现线程竞争,你可能会失去一些覆盖。这不是工具的缺陷;它是不同步访问的结果存储探针数据。)

    对于竞态检测,OP需要找到一个竞态检测工具;测试覆盖率工具不会这样做。

    【讨论】:

      【解决方案4】:

      C++ Coverage Validator 提供模板的覆盖率数据。

      跟踪所有线程的代码覆盖率。

      【讨论】:

        【解决方案5】:

        Parasoft CPP 测试是用于包括代码覆盖率和静态分析在内的各种分析的好工具。这也有利于深入研究多线程。

        http://www.parasoft.com/jsp/products/cpptest.jsp

        这里有 10 个很好的代码覆盖开源工具:

        http://open-tube.com/10-code-coverage-tools-c-c/

        【讨论】:

          最近更新 更多