Ошибка в Xcode 7 о предварительно скомпилированном заголовке и предварительном объявлении в C++

Я обнаружил ошибку в последней версии Xcode 7.0, которая очень раздражает нас в нашей компании, потому что она делает большую часть нашего кода C++ не отлаживаемой. После большого эксперимента я смог воспроизвести его с минимальным количеством кода.

В некоторых случаях невозможно увидеть членов внутри класса C++ в LLDB. Похоже, что для появления этой ошибки должно быть три условия:

  • класс заранее объявлен
  • класс имеет virtual метод
  • класс объявлен внутри предварительно скомпилированного заголовка

Я спрашиваю, знает ли кто-то еще об этой ошибке и какова рекомендуемая процедура для сообщения об этой ошибке (LLVM или Apple?).

Действия по воспроизведению:

Создайте два исходных файла с их содержимым:

header.h

#ifndef HEADER_INCLUDED
#define HEADER_INCLUDED

class A; // forward declaration, has an effect on bug

class A
{
public :
    virtual ~A() {}
protected:
    int doYouSeeMe;
};

#endif

PCHAndFDbug.cpp

#include "header.h"

int main()
{
    A* a = new A();
    return 0;
}

Создайте небольшой проект Xcode 7 с этими двумя файлами. header.h должен быть установлен как предварительно скомпилированный заголовок (настройка заголовкапрефикса в Xcode). Для справки, я использую Premake для создания этого проекта, и вот premake5.lua источник:

solution "PCHAndFDbug"
    configurations {"Debug"}
    xcodebuildsettings { MACOSX_DEPLOYMENT_TARGET = "10.7" }

project "WithPCH"
    language "C++"
    files {"PCHAndFDbug.cpp", "header.h"}
    kind "ConsoleApp"
    pchheader "header.h"

project "WithoutPCH"
    language "C++"
    files {"PCHAndFDbug.cpp", "header.h"}
    kind "ConsoleApp"

Поместите точку останова на return 0 заявление. Проверьте, можете ли вы видеть участника doYouSeeMe в a переменная.

2 ответа

Решение

Та же проблема для меня. Исправлено отключением "Включить отладку модуля Clang" в настройках сборки

По крайней мере, для Apple вы должны отправить отчет об ошибке через центр разработчиков https://developer.apple.com/bug-reporting/

Я тоже сталкивался с этой ошибкой, и она раздражает.

Другие вопросы по тегам