在一台具有GCC 4.4.7 / GCOV 4.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扩展,我认为它与测试普通C应用程序有点不同。
我执行以下操作:
export CFLAGS="--coverage"
python setup.py build_ext --inplace
python tests.py
在两个服务器上,第二个命令都会适当地创建.gcno
文件。
在具有4.4.7的服务器上,第三个命令将成功创建.gcda文件。但是带有4.8.5的服务器会打印该错误消息
[一种版本的GCC所生产的Coverage工具与其他版本的GCC并不完全兼容,因此GCC对其进行了版本兼容。报告的错误消息似乎表明您正在使用一个版本的工具链针对至少部分由其他版本构建的工件和工具执行覆盖率分析。
要解决该问题,您应确保所有检测到的二进制文件,包括任何库,以及任何其他与覆盖范围相关的已构建工件,都是通过相同版本的工具链生成的。从被测组件的源头进行完全干净的重建-包括任何已检测的库,无论是否属于同一构建-都可以解决问题。但是,可能没有必要重建尚未进行覆盖测试的二进制文件。