是Gcov基于应用程序的覆盖范围或基于系统的覆盖范围

时间:2013-05-08 09:53:08

标签: code-coverage gcov lcov

Gcov是基于应用程序的覆盖范围还是基于系统的覆盖范围

不会为所有文件生成

.gcda文件。 gcda文件仅为少数源文件创建。为所有符合gcov complilation标志的源文件创建gcno文件。我的项目也有基于QT的模块,我没有得到.gcda文件。

这里的问题是:基于gcov应用的覆盖工具还是基于系统的覆盖工具?

我在CFLAGS LDFLAGS和CXXFLAGS中添加了-fprofile-arcs -ftest-coverage。

2 个答案:

答案 0 :(得分:0)

使用-fprofile-arcs -ftest-coverage编译代码将生成.gcno文件。

执行二进制文件后,将生成.gcda。因此,在您的情况下,某些二进制文件将不会被执行。如果.gcno文件是w.r.t文件,那么在执行二进制文件后肯定会生成.gcda。

答案 1 :(得分:0)

要回答您的问题,您需要了解gcov的工作原理。请仔细阅读(基本上有四个步骤):

How do the code coverage options of GCC work?

进一步总结一下,基本上gcc将编译并“检测”函数,因此每次执行该函数都会增加或更新一些计数器。这样,您可以在程序结束时获取函数统计信息。

回答你的问题:你刚刚用gcov编译了一些C程序,但没有用gcov编译Qt ,只有将它作为Qt库链接,所以绝对不会有与gcov相关的统计数据。

因此,它不是基于应用程序或系统生成的统计信息,而是取决于在编译期间启用了gcov的C文件。