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-arcs
与llvm-cov gcov
但-fprofile-instr-generate
与llvm-cov show
一起使用。为什么?这是怎么回事?
-fcoverage-mapping
和-ftest-coverage
完全做了什么?
答案 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
然后选项具有以下效果:
-ftest-coverage
:"Don't run the GCov pass, for testing."(这是......令人困惑)-femit-coverage-data
:创建GCDA文件。-femit-coverage-notes
:创建一个GCNO文件。-fprofile-instrument=clang
:the following options之一:ProfileNone, // Profile instrumentation is turned off.
ProfileClangInstr, // Clang instrumentation to generate execution counts
// to use with PGO.
ProfileIRInstr, // IR level PGO instrumentation in LLVM.
所以这回答了一些问题,但确实有两个完全不同的分析系统,我不确定它们之间的区别。