3

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

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

我正在使用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 无法检测到正确的执行。从我上面的命令行参数可以看出:优化已关闭,内联已关闭...

任何想法还有什么可能导致这些问题?

4

1 回答 1

2

似乎问题不在于我的课程只是标题,而是我用 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文件看起来比我预期的要多得多。

于 2016-12-06T12:52:34.347 回答