我正在(终于!)为我的全新C++项目设置代码覆盖率监视。由于我需要一些高级的C++20特性(读取、协同),所以我使用clang 6作为编译器。
现在,我跟踪了本指南关于如何为您的项目做基本的代码覆盖,一切都像魔术一样工作。如果我这样做了:
clang++ -fprofile-instr-generate -fcoverage-mapping test.cpp -o test.out
LLVM_PROFILE_FILE="coverage/test.profraw" ./test.out
llvm-profdata merge -sparse coverage/test.profraw -o coverage/test.profdata
llvm-cov show ./test.out -instr-profile=coverage/test.profdata我的终端上有一份漂亮的彩色报告,它告诉我什么是覆盖的,什么是不覆盖的。
到目前一切尚好!我以为我已经接近我想要的了,但当我试图把报告上传到codecov.io时,疼痛就开始了。
我试过几件事,包括:
https://codecov.io/bash文件夹上运行他们的coverage脚本,希望它能抓住我的test.profdata。没有骰子,这是有意义的,因为即使是llvm-cov也需要可执行文件的路径来运行。export功能:在运行llvm-cov export --instr-profile=coverage/test.profdata ./test.out时,我会得到一个好看的JSON文件(通过终端)。我试着把输出扔到一个coverage.json文件中,这个文件实际上是上传的,但是codecov只是说解析它时出错了,没有进一步的信息。我感觉完全迷失了。在他们的网站上,每件事看起来都是黑匣子,我只是不明白怎么做那些不符合他们所能处理的情况的事情。
我怎么才能和codecov一起工作呢?如果codecov不能处理我的报告,是否还有其他类似的在线代码覆盖可以让它工作呢?
发布于 2018-06-16 02:08:40
看起来,bash脚本codecov用来将覆盖数据上传到他们的站点,查找与其理解的格式相匹配的各种模式的文件。这些文档很少,但是通过查看吉蒂布的剧本,您至少可以看到哪些模式是可行的。当然,这并不能告诉您codecov对与给定模式匹配的文件的格式有什么期望,正如您在拒绝coverage.json文件时所发现的那样。
通过反复尝试,我发现以下内容生成了一个文件,在运行bash脚本时,codecov将正确解释该文件:
llvm-cov show ./test.out -instr-profile=default.profdata > coverage.txt
我还没有广泛地测试允许使用什么文件名,但是似乎可以在coverage和.txt之间添加您想要的任何附加字符到您要将覆盖数据传输到的文件的名称中(例如,您可以将它称为coverage_my_file_name.txt)。
编辑:如果这对任何人都有帮助的话,那么上述结论的一个重要推论就是,必须避免命名任何不是覆盖报告的名称,比如与此模式相匹配的内容。我刚刚处理了一个场景,其中有一堆名为coverage_more_text_here.out的可执行文件被上传到报告中。事实证明,试图将程序集代码解析为覆盖报告会导致codecov神秘地失败,而不会出现任何有用的错误。
发布于 2018-10-10 09:56:43
另一种选择是使用GCOV分析,这比基于源的分析稍微差一些,但它得到了codecov.io的支持。您需要“-覆盖率”编译器标志来启用它。
您可以使用格罗夫 (您也可以从https://github.com/mozilla/grcov/releases下载)解析gcno/gcda文件,并通过codecov.io bash上传器上传它们:
grcov OBJ_DIR -s SRC_DIR -t lcov --branch > lcov.info
bash codecov.sh -f "lcov.info"我计划在grcov中增加对基于源的报告的支持,这将使对codecov格式的支持变得更容易。
https://stackoverflow.com/questions/50613601
复制相似问题