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。
相关问题:
当您使用分析进行编译时,每次运行的结果都存储在以.gcda.
.gcda当现有文件的格式与刚刚完成运行的当前程序的格式不同时,就会出现该错误。
当我运行 Linux 版本的可执行文件,然后针对 MacOS 重新编译并运行它时,就发生了这种情况。MacOS 程序看到现有.gcda文件并生成错误页面。
通过删除现有文件来消除错误.gcda。
我遇到了同样的问题。我的解决方案是:
有一个通用Test.pro项目,用于SUBDIRS将每个测试项目作为子项目包含在内。
在每个测试子项目中我都有以下行
QMAKE_POST_LINK = rm -f "*.gcda"
这仅删除刚刚重新链接的子项目的 *.gcda 文件。未修改的项目保留其 *.gcda 文件。