[英]clang++ always generates empty profraw coverage reports
我第一次尝试将 C++ 中的覆盖率与 clang 6 集成在一起,并且一直在遵循本指南。
我成功编译了二进制文件,生成了一个.profraw
文件并生成了一个.profdata
文件,如步骤 1、2 和 3a 中所述。 但是,当我尝试创建 3b 中所述的面向行的覆盖率报告时,我收到以下消息:
error: build/debug/dane: Failed to load coverage: No coverage data found
检查.profraw
文件后,我发现它是空的。 我尝试稍微更改我的代码并再次运行,但生成的.profraw
始终为空。
我的main.cpp
文件:
#include <iostream>
int main(int argc, char **argv) {
std::cout << "Hello, World!" << std::endl;
return 0;
}
我的SConstruct
文件:
env = Environment(CXX='clang++', CXXFLAGS=['-Wall', '-g', '-O0'], LINKFLAGS=['-fprofile-instr-generate', '-fcoverage-mapping'])
env.Program(target='build/debug/dane', source=['src/main.cpp'])
命令行输出:
➤ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
clang++ -o src/main.o -c -Wall -g -O0 src/main.cpp
clang++ -o build/debug/dane -fprofile-instr-generate -fcoverage-mapping src/main.o
scons: done building targets.
➤ build/debug/dane
Hello, World!
➤ llvm-profdata merge -sparse default.profraw -o default.profdata
➤ llvm-cov show build/debug/dane -instr-profile=default.profdata
error: build/debug/dane: Failed to load coverage: No coverage data found
我希望default.profraw
文件保存有意义的覆盖结果,并且不知道为什么它是空的。
终于解决了。 起初我将-fprofile-instr-generate -fcoverage-mapping
标志指定为CXXFLAGS
,但它不起作用,所以我明白这些是链接器标志并将它们移动到LINKFLAGS
(这导致了这篇沮丧的帖子)。 显然,这些标志需要同时作为编译标志和链接器标志出现才能使整个工作正常进行。 我还尝试检查是否可以在编译器和链接器之间分发标志,但没有成功。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.