Dan*_*rad 2 c++ code-coverage llvm-clang clang++
我第一次尝试将 C++ 中的覆盖范围与 clang 6 集成,并且一直在遵循本指南。
\n\n我成功编译了二进制文件,生成了一个.profraw文件,并.profdata按照步骤 1、2 和 3a 中所述生成了一个文件。但是,当我尝试创建 3b 中所述的面向行的覆盖率报告时,我收到以下消息:
error: build/debug/dane: Failed to load coverage: No coverage data found\nRun Code Online (Sandbox Code Playgroud)\n\n检查.profraw文件后,我发现它是空的。我尝试稍微更改一下代码并再次运行,但生成的代码.profraw始终为空。
我的main.cpp文件:
error: build/debug/dane: Failed to load coverage: No coverage data found\nRun Code Online (Sandbox Code Playgroud)\n\n我的SConstruct文件:
#include <iostream>\n\nint main(int argc, char **argv) {\n std::cout << "Hello, World!" << std::endl;\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n命令行输出:
\n\n\nenv = Environment(CXX=\'clang++\', CXXFLAGS=[\'-Wall\', \'-g\', \'-O0\'], LINKFLAGS=[\'-fprofile-instr-generate\', \'-fcoverage-mapping\'])\nenv.Program(target=\'build/debug/dane\', source=[\'src/main.cpp\'])\n\nRun Code Online (Sandbox Code Playgroud)\n\n我希望该default.profraw文件能够保存有意义的覆盖结果,但不知道为什么它是空的。
终于解决了。起初,我将-fprofile-instr-generate -fcoverage-mapping标志指定为CXXFLAGS,但它不起作用,所以我明白这些是链接器标志并将它们移动到LINKFLAGS(这导致了这篇令人沮丧的帖子)。显然,这些标志需要同时作为编译标志和链接器标志出现,以便整个工作正常进行。我还尝试检查是否可以在编译器和链接器之间分发标志,但没有成功。