Ошибка в 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/
Я тоже сталкивался с этой ошибкой, и она раздражает.