Clang --coverage和-fprofile选项

时间:2018-01-31 11:16:41

标签: c++ clang

Clang有一些与coverage风格分析相关的选项。 command line reference并没有真正说明他们做了什么:

--coverage
-fprofile-arcs
-fprofile-instr-generate
-ftest-coverage
-fcoverage-mapping

根据llvm-cov docs --coverage启用-fprofile-arcs-ftest-coverage以及更多内容。

两个-fprofile-..标志以某种方式添加检测以记录执行计数,但它们是否完全相同?如果是这样,为什么两者都有?

llvm-cov文档说-fprofile-arcsllvm-cov gcov-fprofile-instr-generatellvm-cov show一起使用。为什么?这是怎么回事?

-fcoverage-mapping-ftest-coverage完全做了什么?

1 个答案:

答案 0 :(得分:1)

我开始阅读the code,据我所知:

--coverage启用-ftest-coverage-fprofile-arcs,并在Linux上添加-u__llvm_runtime_variable或类似内容。

-fprofile-arcs-fprofile-instr-generate 不同。前者添加-femit-coverage-data,后者添加-fprofile-instrument=clang(其他选项为“none”或“llvm”)。

-ftest-coverage添加-femit-coverage-notes

-fcoverage-mapping添加-fcoverage-mapping

然后选项具有以下效果:

ProfileNone,       // Profile instrumentation is turned off.
ProfileClangInstr, // Clang instrumentation to generate execution counts
                   // to use with PGO.
ProfileIRInstr,    // IR level PGO instrumentation in LLVM.

所以这回答了一些问题,但确实有两个完全不同的分析系统,我不确定它们之间的区别。