当我用clang编译代码时,gcov抛出内存不足错误

时间:2019-05-22 14:08:27

标签: c++ clang clang++ gcov

我正在尝试建立一个基本项目,并且我想使用gcov。当我使用g ++时,它可以工作:

g++ main.cpp whatever.cpp -fprofile-arcs -ftest-coverage

gcov的输出正常:

gcov main.gcno 
main.gcda:cannot open data file, assuming not executed
File 'main.cpp'
Lines executed:0.00% of 20
Creating 'main.cpp.gcov'

File '/usr/include/c++/7/iostream'
Lines executed:0.00% of 1
Creating 'iostream.gcov'

但是,我需要使用clang。运行编译命令后:

clang++-6.0 main.cpp whatever.cpp -fprofile-arcs -ftest-coverage

我收到以下错误:

main.gcno:version '402*', prefer 'A73*'

gcov: out of memory allocating 16158246392 bytes after a total of 0 bytes

我的gcov版本是7.3.0,与gcc和g ++相同。

有什么主意,我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:0)

Here's参考,用于从Clang和相关实用程序获取基于源代码的代码覆盖率报告。

答案 1 :(得分:0)

当尝试使用lcov生成html报告和使用gcovr生成xml报告时,我遇到了类似的版本不匹配问题。

lcov

我添加了参数--gcov-tool gcov_for_clang.sh

gcovr

我添加了参数--gcov-executable gcov_for_clang.sh

gcov_for_clang.sh

包含:

#!/bin/bash
exec llvm-cov-6.0 gcov "$@"

比率:lcov的{​​{1}}无法处理--gcov-toolllvm-cov-6.0之间的空格,因此bash脚本是间接的。不要忘记使文件可执行!

回到您的问题

我想您只需将gcov替换为gcov main.gcno。这不是使用LLVM真正的基于源的覆盖工具,而是使用gcov-compatible coverage implementation

关于编译器选项的注意事项

在我的设置中,我只需通过llvm-cov-6.0 gcov main.gcno作为编译器选项,就足够了。