在一个使用GCC 4.4.7 /GCOV4.4.7的服务器上,我能够成功地运行测试。但是,在使用GCC 4.8.5/GCOV 4.8.5的不同服务器上,运行测试结果会导致以下错误:
profiling:/path/to/foo.gcda:Version mismatch - expected 700e got 408R
以下是这些版本的输出:
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
$ gcov --version
gcov (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
在寻找这一错误后,似乎经常是gcc和gcov之间的版本不匹配造成的,而我的版本却是相同的。
我们最近把这台服务器上的gcc从4.4.7升级到4.8.5。这个问题似乎是由升级引起的。
我应该提到,我正在测试Python扩展,我认为这与测试普通的C应用程序有点不同。
我所做的工作如下:
export CFLAGS="--coverage"
python setup.py build_ext --inplace
python tests.py
在这两个服务器上,第二个命令适当地创建.gcno
文件。
在4.4.7的服务器上,第三个命令将成功地创建.gcda文件。但是4.8.5的服务器打印错误消息
发布于 2020-02-22 00:23:00
GCC的一个版本制作的覆盖仪器与其他版本的不完全兼容,GCC版也是如此。报告的错误消息似乎表明,您正在使用工具链的一个版本对至少部分使用不同版本构建的工件和工具执行覆盖率分析。
为了解决这个问题,您应该确保所有的工具化二进制文件,包括任何库,以及任何其他与覆盖相关的构建工件,都是通过相同版本的工具链生成的。从测试中的组件的源--包括任何仪器化库,不管是否属于同一个构建--进行完全干净的重构,应该可以做到这一点。但是,可能没有必要重新构建尚未用于覆盖测试的二进制文件。
https://stackoverflow.com/questions/60343696
复制相似问题