c++ - Xcode 7 中有关 C++ 中预编译 header 和前向声明的错误

标签 c++ llvm xcode7 forward-declaration precompiled-headers

我在最新的 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/

相关文章:

ios - Xcode 7.1 证书问题和无效配置文件

iphone - Xcode 7 - 尝试在 iOS 9 设备上运行应用程序时获取 "The application does not contain a valid application-identifier entitlement."

c++ - 获取组合框的文本 Win32 API C++ (NO MFC)

c++ - 使用 glTexImage2D 函数缺少绿色分量,为什么?

python - 扩展python时如何提供C++版本

c - 为什么 GCC/Clang 在不同情况下的初始化行为不同?

llvm - 为什么 LLVM 执行引擎比编译代码更快?

c++ - 在 Try/Catch 处理程序中获取 pContext?

haskell - 使用 LLVM(来自 Haskell)的大数算术

ios - Paytm sdk ios 集成以打开 Paytm 付款表格?