Xcode 7 中有关 C++ 中预编译 header 和前向声明的错误
Bug in Xcode 7 about precompiled header and forward declaration in C++
我在最新的 Xcode 7.0 中发现了一个错误,这让我们公司非常恼火,因为它使我们的大部分 C++ 代码无法调试。经过大量实验,我能够用最少的代码重现它。
在某些情况下,在 LLDB 上无法看到 C++ class 中的成员。似乎必须满足三个条件才能出现该错误:
- 前向声明class
- class 有一个
virtual
方法
- class 是在预编译的 header
中声明的
我想问是否其他人已经知道该错误以及报告该错误的推荐程序是什么(向 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
必须设置为预编译的 header(Prefix header setting in 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
语句上放置一个断点。检查您是否可以在 a
变量中看到成员 doYouSeeMe
。
至少对于 Apple,您应该通过开发者中心提交错误报告https://developer.apple.com/bug-reporting/
我也遇到过这个bug,很烦人。
我也遇到同样的问题。通过在构建设置
中关闭 "Enable Clang Module Debugging" 来修复
我在最新的 Xcode 7.0 中发现了一个错误,这让我们公司非常恼火,因为它使我们的大部分 C++ 代码无法调试。经过大量实验,我能够用最少的代码重现它。
在某些情况下,在 LLDB 上无法看到 C++ class 中的成员。似乎必须满足三个条件才能出现该错误:
- 前向声明class
- class 有一个
virtual
方法 - class 是在预编译的 header 中声明的
我想问是否其他人已经知道该错误以及报告该错误的推荐程序是什么(向 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
必须设置为预编译的 header(Prefix header setting in 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
语句上放置一个断点。检查您是否可以在 a
变量中看到成员 doYouSeeMe
。
至少对于 Apple,您应该通过开发者中心提交错误报告https://developer.apple.com/bug-reporting/
我也遇到过这个bug,很烦人。
我也遇到同样的问题。通过在构建设置
中关闭 "Enable Clang Module Debugging" 来修复