为了解决xcode 7.3中的苹果bug,xcode在命中某些断点时会爆炸,我们需要关闭CLANG_ENABLE_MODULE_DEBUGGING或继续使用xcode 7.2。关掉CLANG_ENABLE_MODULE_DEBUGGING听起来很棒。
在典型的CLang开发人员工作环境中不能调试iOS模块意味着什么?如何才能知道CLang模块直接或过渡地依赖于什么?
这里有一个关于爆炸问题的讨论:https://forums.developer.apple.com/message/126468#126468
理解CLang模块并调试它们()
这是一个目标C模块简介
来自另一个名为苹果发布Xcode 7 Beta的来源
C、C++、Objective和Objective++的Clang模块和预编译头包含它们定义的类型的调试信息。使用Xcode设置CLANG_ENABLE_MODULE_DEBUGGING=YES (默认情况下启用)构建时,clang存储对类型的引用
我看到几个我们的可可豆使用@import,这似乎是相关的。
什么是典型的调试信息的例子,我们不会在此关闭?
发布于 2016-04-02 00:43:32
当打开clang模块调试时,clang将为代码导入的所有模块中包含的所有类型生成调试信息,每个模块分别导入调试信息的单独部分,然后所有其他调试信息都可以通过指向调试信息中的模块的部分来使用来自该模块的类型。
当关闭clang模块调试时,每个编译单元(.c、.m或.swift文件)将获得它使用的任何类型的副本,并在本地引用它们。
因此,打开这个"on“可以减少大型项目的调试信息的大小。
此外,由于调试信息可能会变得相当大,在"off“情况下,编译器会玩一些小把戏来使调试大小易于管理。例如,clang只将使用的类型发送到调试信息中,因此,如果程序中没有人使用某个模块的类型,则不会获得该类型的调试信息。一般来说,这并不是一个很大的问题,因为如果您从未在代码中使用某种类型的代码,那么您在调试中就不太可能使用它。但它有时会引起问题。
它也不为您的程序使用但不定义的函数发出签名信息。这就是为什么您必须在"print“命令中的表达式中强制转换返回类型,而不必在代码中进行强制转换。
OTOH,当它是"on“时,因为编译器知道它只需要生成一次这个信息,它就可以更完整地了解它所发出的内容。
对于目标C,您可以通过运行以下模块来处理来自您正在使用的模块的任何缺失类型/函数签名:
(lldb) expr @import "FrameworkWhoseTypesOrSignaturesYouWant"在调试会话开始时。
https://stackoverflow.com/questions/36265490
复制相似问题