我理解两个编译器标志:-ftest-coverage fprofile-arcs,需要通过才能在GCC中获得代码覆盖率。我的问题是,有两个编译器标志来获得覆盖的理由是什么?另外,如果我们独立使用它们,我们能得到什么呢?
我试着用-fprofile-arcs标志编译一个c程序。我没有注意到有什么不同。能够生成.gcno .gcda和gcov文件。
发布于 2016-08-31 00: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引导的优化的标准方法)。
希望这能有所帮助!
https://stackoverflow.com/questions/39241757
复制