【问题标题】:Run gcov tool on folder在文件夹上运行 gcov 工具
【发布时间】:2012-11-24 04:47:00
【问题描述】:

我使用gcc -fprofile-arcs -ftest-coverage [filenames] 对一些.c 文件运行gcov 工具。命令
但是为这个命令提供文件名是非常乏味的工作。
相反,我需要帮助,以便我可以在包含所有源文件的文件夹上运行 gcov 工具
这可能吗? 请帮我解决一下。

提前致谢。

【问题讨论】:

  • 以下信息将帮助其他人为您提供更好的答案:您如何提供其他编译标志?有生成文件吗?如果是这样,只需附加 CFLAGS。

标签: gcov


【解决方案1】:

首先,您在问题中指定的命令用于编译 c/c++ 文件并对其进行检测,以便在稍后执行时生成覆盖率。

该命令也可以如下使用: gcc --覆盖 g++ --coverage

注意:您也必须为链接指定相同的标志。

现在关于这个问题,如果您的问题是关于编译多个文件,那么无论多么复杂,构建项目都有很多方法。您可以使用自动构建。

如果您的问题是为多个文件生成覆盖率报告,那么:

您可以使用 gcovr 生成各种形式的报告,只需使用“-r 或 --root=ROOT”标志指定根目录(src 和 obj 之上的目录)。 参考这个user guide

如果您真的只想只使用 gcov 而别无其他,其他人给出的答案也可以。但在我看来,gcovr 满足了 gcov 可以实现的所有目的(除了功能级别的详细信息,您可以获取行级别的详细信息)。

【讨论】:

    【解决方案2】:

    [LCOV][1] 自动提供用户友好的报告,我建议先看看。

    如果您真的想使用 gcov 显示覆盖率数据,您可以尝试

    找到 . -name "*.cpp" -exec sh -c 'gcov {} -o "$(dirname {})"' \;

    这将根据您的 gcno 和 gcda 文件创建 gcov 文件。

    通常移动 gcno/gcda 文件并不是一个完美的主意。这将导致查找源代码时出现问题。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我的项目包含约 3000 个文件。 编写一个 shell 脚本,使用 find exec 将所有 .c .gcno 和 .gcda 文件抓取到一个公共文件夹中,然后使用相同的命令运行 gcov。 示例:

      LOCATION=your_gcov_folder_name
      find -name '*.c' -exec cp -t $LOCATION {} +
      find -name '*.gcno' -exec cp -t $LOCATION {} +
      find -name '*.gcda' -exec cp -t $LOCATION {} +
      cd $LOCATION
      find -name '*.c' -exec gcov -bf {} \;
      

      在包含项目的代码文件夹中运行它。

      【讨论】:

        猜你喜欢
        • 2013-08-06
        • 2019-11-06
        • 2020-06-03
        • 2017-07-01
        • 2020-12-01
        • 2017-12-08
        • 1970-01-01
        • 1970-01-01
        • 2012-11-15
        相关资源
        最近更新 更多