恼人的错误信息:无法合并以前的GCDA文件

问题描述 投票:5回答:1

问题:

我正在使用以下标志来生成我的Qt应用程序(.pro文件)的代码覆盖率:

QMAKE_CXXFLAGS += --coverage
QMAKE_LFLAGS += --coverage

代码覆盖率是正确生成的,问题是如果我只想运行一个测试函数/类(并且已经创建了GCDA文件),我会收到以下错误消息:

profiling: /Users/user/.../build-myapp/myclass.gcda: cannot merge previous GCDA file: corrupt arc tag (0x00000000)

请注意,每个GCDA文件都会显示错误消息。另请注意,它似乎不会影响测试用例。


解决方法:

正如here所解释的,它“是由于构建工具无法将当前结果合并到现有的.gcda覆盖文件中”。如问题所述,一个选项是在运行测试之前删除GCDA文件。例如,通过在构建阶段添加以下命令:

find . -name "*.gcda" -print0 | xargs -0 rm

题:

我的问题是每次运行测试用例时我都不想删除旧的GCDA文件。因为我只运行一个测试函数/类,所以我希望保留旧的GCDA文件,并且只合并与当前类相关的GCDA文件。当我手动检查时,它已经完成,因为只更新了当前类的覆盖范围,旧的覆盖范围保持不变。

那么,是否有命令忽略(不显示)与GCDA合并问题相关的错误消息?或者更好的是,只更新与当前测试类相关的GCDA文件的命令?

注意:我在使用Clang的macOS Sierra上使用Qt 5.3.2。


相关问题:

c++ qt code-coverage
1个回答
0
投票

我遇到了同样的问题。我的解决方案是:

  1. 有一个通用的Test.pro项目,它使用SUBDIRS将每个测试项目都包含在子项目中。
  2. 在每个测试子项目中,我有以下行 QMAKE_POST_LINK = rm -f "*.gcda"

这仅删除刚刚重新链接的子项目的* .gcda文件。未修改的项目保留其* .gcda文件。

© www.soinside.com 2019 - 2024. All rights reserved.