首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么GCC中的代码覆盖率需要传递两个编译器标志?

为什么GCC中的代码覆盖率需要传递两个编译器标志?
EN

Stack Overflow用户
提问于 2016-08-31 05:57:14
回答 1查看 8.7K关注 0票数 4

我理解两个编译器标志:-ftest-coverage fprofile-arcs,需要通过才能在GCC中获得代码覆盖率。我的问题是,有两个编译器标志来获得覆盖的理由是什么?另外,如果我们独立使用它们,我们能得到什么呢?

我试着用-fprofile-arcs标志编译一个c程序。我没有注意到有什么不同。能够生成.gcno .gcda和gcov文件。

EN

回答 1

Stack Overflow用户

发布于 2016-08-31 08:12:47

如果您想使用Gcov工具获取GCC中的代码覆盖率,请参考这份文件,其中明确声明:

使用gcov时,必须首先使用两个特殊的GCC选项编译程序:“-fprofile-arcs coverage”。这告诉编译器生成gcov所需的附加信息(基本上是程序的流程图),并在目标文件中包含额外的代码,以生成gcov所需的额外分析信息。

更确切地说,通过引用仪表选项,我对这两个标志的理解如下:

  • -fprofile-arcs生成指示程序每个分支被占用多少次的信息;换句话说,这使得您的程序生成相对于其执行的额外数据。信息存储在.gcda文件中。
  • -ftest-coverage使用-fprofile-arcs生成的信息,生成包含控制流信息的.gcno文件,Gcov可以使用这些信息生成人类可读的.gcov文件。如果没有使用-fprofile-arcs获得的测试覆盖数据,您将无法获得任何有意义的信息。

-fprofile-arcs也可以与其他标志相结合,如-fbranch-probabilities (更多信息这里)。通常,当使用此标志时,编译器将根据.gcda文件中包含的分析信息执行优化以改进分支预测。-fprofile-arcs-fbranch-probabilities在使用-fprofile-generate-fprofile-use时会自动启用(这是使用GCC执行Profile引导的优化的标准方法)。

希望这能有所帮助!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39241757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档