首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭CLANG_ENABLE_MODULE_DEBUGGING后果

关闭CLANG_ENABLE_MODULE_DEBUGGING后果
EN

Stack Overflow用户
提问于 2016-03-28 15:30:14
回答 1查看 3.4K关注 0票数 6

为了解决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,这似乎是相关的。

什么是典型的调试信息的例子,我们不会在此关闭?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-02 00:43:32

当打开clang模块调试时,clang将为代码导入的所有模块中包含的所有类型生成调试信息,每个模块分别导入调试信息的单独部分,然后所有其他调试信息都可以通过指向调试信息中的模块的部分来使用来自该模块的类型。

当关闭clang模块调试时,每个编译单元(.c、.m或.swift文件)将获得它使用的任何类型的副本,并在本地引用它们。

因此,打开这个"on“可以减少大型项目的调试信息的大小。

此外,由于调试信息可能会变得相当大,在"off“情况下,编译器会玩一些小把戏来使调试大小易于管理。例如,clang只将使用的类型发送到调试信息中,因此,如果程序中没有人使用某个模块的类型,则不会获得该类型的调试信息。一般来说,这并不是一个很大的问题,因为如果您从未在代码中使用某种类型的代码,那么您在调试中就不太可能使用它。但它有时会引起问题。

它也不为您的程序使用但不定义的函数发出签名信息。这就是为什么您必须在"print“命令中的表达式中强制转换返回类型,而不必在代码中进行强制转换。

OTOH,当它是"on“时,因为编译器知道它只需要生成一次这个信息,它就可以更完整地了解它所发出的内容。

对于目标C,您可以通过运行以下模块来处理来自您正在使用的模块的任何缺失类型/函数签名:

代码语言:javascript
复制
(lldb) expr @import "FrameworkWhoseTypesOrSignaturesYouWant"

在调试会话开始时。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36265490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档