问题:

我正在使用以下标志来生成我的 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文件。正如我手动检查的那样,它已经完成了,因为仅更新了当前类的coverage,而旧的coverage保持不变。

因此,是否有一个命令可以忽略(不显示)与GCDA合并问题有关的错误消息?甚至更好的是仅更新与当前测试类相关的GCDA文件的命令?

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

相关问题:
  • Code coverage warnings spam output
  • How to merge multiple versions of gcda files?
  • .gcda files don't merge on multiple runs
  • 最佳答案

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

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

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

    关于c++ - 烦人的错误消息: cannot merge previous GCDA file,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47393377/

    10-08 22:32