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

Я обнаружил ошибку в последней версии 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» в настройках сборки

2

Другие решения

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

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

2

По вопросам рекламы [email protected]