分析"无效的弧标记" (00000000)

时间:2014-05-19 19:03:06

标签: c++ qt logging code-coverage

执行启用了代码覆盖的程序时出现以下错误:

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。

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