首页 > 解决方案 > 当我用 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++ 相同。

知道什么是错的,我能做些什么吗?

谢谢!

标签: c++clangclang++gcov

解决方案


在尝试lcov使用gcovr.

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'--gcov-tool不能处理 和 之间的空间llvm-cov-6.0gcov因此是 bash 脚本间接。不要忘记使文件可执行!

回到你的问题

我想你只需要替换gcov main.gcnollvm-cov-6.0 gcov main.gcno. 这不是使用 LLVM 真正的基于源的覆盖工具,而是使用其与gcov 兼容的覆盖实现

注意编译器选项

在我的设置中,我只是--coverage作为编译器选项传递,这应该足够了。


推荐阅读