【问题标题】:is Gcov an application based coverage or system based coverageGcov 是基于应用程序的覆盖还是基于系统的覆盖
【发布时间】:2013-05-02 12:02:22
【问题描述】:

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

.gcda 文件不会为所有文件生成。 gcda 文件仅为少数源文件创建。为所有符合 gcov 编译标志的源文件创建 gcno 文件。我的项目还有基于 QT 的模块,我没有获得 .gcda 文件。

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

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

【问题讨论】:

    标签: code-coverage gcov lcov


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      How do the code coverage options of GCC work?

      为了进一步总结,基本上 gcc 将编译和“检测”函数,因此函数的每次执行都会增加或更新一些计数器。这样就可以在程序结束时得到函数统计。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-26
        • 1970-01-01
        • 2017-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-20
        相关资源
        最近更新 更多