【问题标题】:gcov reporting wrong result for header only classgcov 报告仅标头类的错误结果
【发布时间】:2017-03-18 02:53:37
【问题描述】:

之前已经问过很多类似的问题了:

仅举几例。然而,他们都没有帮助我解决我自己的问题。

我正在用 gcc 版本 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 编译我的源代码

g++ -c -pipe -Wno-psabi -std=gnu++11 -Wextra -pedantic -fprofile-arcs -ftest-coverage --coverage -fno-inline -fno-inline-small-functions -fno-default-inline -O0 -fno-elide-constructors -g -Wall -W -o .obj/myclass.o unittest_myclass.cpp

然后我使用

在我的一个源文件上运行 gcov (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
gcov unittest_myclass.cpp -o .obj/

此文件包含仅针对标头类的单元测试。 gcov 成功生成此头文件的覆盖率信息:

File '../include/myclass.h'
Lines executed:11.05% of 173
Creating 'myclass.h.gcov'

但是,myclass.h.gcov 中的结果是错误的。对于大多数行 gcov 报告它们不包含可执行代码。对于它检测为可执行的那些,它主要报告它们尚未被执行。但我确信它们正在被执行(我在调试过程中验证了它,一些单元测试由于错误等而失败)。不涉及模板。 因此我猜由于某种原因 gcov 无法检测到正确的执行。从我上面的命令行参数可以看出:优化已关闭,内联已关闭...

还有什么可能导致这些问题的想法吗?

【问题讨论】:

    标签: c++ unit-testing code-coverage gcov header-only


    【解决方案1】:

    看来问题不在于我的课程只是标题,而是我用 gcov 调用了

    gcov unittest_myclass.cpp -o .obj/

    如果我改为使用

    运行它

    gcov *.cpp -o .obj/

    它报告

    File '../include/myclass.h'
    Lines executed:95.56% of 248
    Creating 'myclass.h.gcov'
    

    生成的 myclass.h.gcov 文件看起来比我预期的要多得多。

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2017-07-07
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多