性能分析"invalid arc tag" (0x00000000)

profiling "invalid arc tag" (0x00000000)

本文关键字:0x00000000 tag invalid 性能 arc      更新时间:2023-10-16

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

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

引自这篇文章(几十个"profiling:invalid arc tag"当运行代码覆盖在Xcode 5)

这很可能是构建工具未能将当前结果合并到现有的.gcda覆盖文件中的结果。正如Dave Meehan在这里指出的那样,有一种蛮力的方法可以通过清理产品构建文件夹来处理这个问题,但是一种不那么硬的方法是从生成它们的目标中删除.gcda文件(对我来说,只是测试目标),作为构建过程的一部分。Dave包含了一个示例脚本,作为构建阶段包含——或者,在项目根目录下手工包含:

find . -name "*.gcda" -print0 | xargs -0 rm

或者更短一点

find . -name "*.gcda" -delete