执行启用了代码覆盖的程序时出现以下错误:
profiling "invalid arc tag" (0x00000000)
删除* .gnca文件解决了这个问题,但我想知道是否有一个技巧可以避免它的产生。
以下是重现问题的示例Qt项目:
// example.pro
QT += core
QT -= gui
TARGET = example
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
QMAKE_CXXFLAGS += -g -O0 -fprofile-arcs -ftest-coverage
QMAKE_LFLAGS += -g -O0 -fprofile-arcs -ftest-coverage
SOURCES += main.cpp \
MyClass.cpp
HEADERS += \
MyClass.h
main.cpp文件:
// main.cpp
int main(int argc, char *argv[])
{
return 0;
}
我的对象标题:
// myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QObject>
class MyClass : public QObject
{
Q_OBJECT
public slots:
void slot1();
}
#endif // MYCLASS_H
及其实施:
// myclass.cpp
#include "myclass.h"
void MyClass::test1()
{
}
创建项目并进行编译,然后将另一个插槽添加到 MyClass (例如:void test2())。
然后在执行期间触发警告。
我在MacOSX 10.9下使用Qt 5.2.1。
答案 0 :(得分:4)
引用此帖子(Dozens of "profiling:invalid arc tag" when running code coverage in Xcode 5)
这很可能是因为构建工具无法将当前结果合并到现有的.gcda coverage文件中。作为Dave Meehan points out here,有一种通过清理产品构建文件夹来解决这个问题的蛮力方法,但是一个不那么难的核心方法是从生成它们的目标中删除.gcda文件(对我来说,只是测试目标)作为构建过程的一部分。 Dave包含一个示例脚本,作为构建阶段包含在内 - 或者,在项目根目录中包含:
find . -name "*.gcda" -print0 | xargs -0 rm
或者稍微短暂
find . -name "*.gcda" -delete