我在最新的 Xcode 7.0 中发现了一个 bug,这让我们公司的我们非常烦恼,因为它使得我们的大部分 C++ 代码都无法调试。经过大量实验,我能够用最少的代码重现它。
在某些情况下,不可能在 LLDB 上看到 C++ 类中的成员。看来该错误的出现必须满足三个条件:
- 该类是前向声明的
- 该类有一个
虚拟
方法 - 该类在预编译头中声明
我想问是否其他人已经知道该错误,以及报告该错误的推荐程序是什么(向 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 (Xcode 中的前缀 header 设置)。作为引用,我使用 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
。
最佳答案
对我来说同样的问题。通过在build设置中关闭“启用 Clang 模块调试”来修复
关于c++ - Xcode 7 中有关 C++ 中预编译 header 和前向声明的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32778781/