令人讨厌的错误消息:无法合并以前的GCDA文件

Kel*_*inS 5 c++ qt code-coverage

问题

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

QMAKE_CXXFLAGS += --coverage
QMAKE_LFLAGS += --coverage
Run Code Online (Sandbox Code Playgroud)

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

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

请注意该错误消息显示每个GCDA文件。另外,请注意,它似乎并没有影响测试用例。


解决方法

正如解释在这里,它“ 是一个构建工具无法合并当前结果到现有.gcda覆盖率文件的结果 ”。正如问题中回答的那样,一种选择是在运行测试之前删除GCDA文件。例如,通过在构建阶段添加以下命令:

find . -name "*.gcda" -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)

问题

我的问题是,我不想每次运行测试用例时都删除旧的GCDA文件。由于我只运行一个测试函数/类,因此我想保持旧的GCDA文件不变,并且仅合并与当前类相关的GCDA文件。正如我手动检查的那样,它已经完成了,因为仅更新了当前类的coverage,而旧的coverage保持不变。

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

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


相关问题

vy3*_*y32 5

当您使用分析进行编译时,每次运行的结果都存储在以.gcda.

.gcda当现有文件的格式与刚刚完成运行的当前程序的格式不同时,就会出现该错误。

当我运行 Linux 版本的可执行文件,然后针对 MacOS 重新编译并运行它时,就发生了这种情况。MacOS 程序看到现有.gcda文件并生成错误页面。

通过删除现有文件来消除错误.gcda


Mic*_*hal 4

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

  1. 有一个通用Test.pro项目,用于SUBDIRS将每个测试项目作为子项目包含在内。

  2. 在每个测试子项目中我都有以下行 QMAKE_POST_LINK = rm -f "*.gcda"

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