fin*_*elp 6 debugging xcode clang llvm-clang ios
为了解决xcode 7.3中的苹果错误,当遇到某些断点时xcode爆炸,我们需要关闭CLANG_ENABLE_MODULE_DEBUGGING或保持xcode 7.2.关闭CLANG_ENABLE_MODULE_DEBUGGING听起来很棒.
在典型的iOS开发人员工作环境中无法调试CLang模块真正意味着什么?如何才能知道CLang模块直接或传递的依赖?
以下是关于爆炸问题的讨论:https://forums.developer.apple.com/message/126468#126468
了解CLang模块并调试它们
来自另一个名为Apple Releases Xcode 7 Beta的消息来源:
C,C++,Objective-C和Objective-C++的Clang模块和预编译头包含它们定义的类型的调试信息.使用Xcode设置CLANG_ENABLE_MODULE_DEBUGGING = YES(默认启用)构建时,clang存储对类型的引用
我看到我们的几个Cocoa Pod使用@import似乎相关.
什么是调试信息的典型示例,我们不会看到它关闭?
当打开clang模块调试时,clang会为您的代码在其自己的调试信息单独部分中导入的任何模块中包含的所有类型生成调试信息,然后所有其他调试信息都可以使用来自该模块通过指向调试信息中的该模块部分.
当关闭clang模块调试时,每个编译单元(.c,.m或.swift文件)将获得它使用的任何类型的副本,并将在本地引用它们.
因此,将此"打开"可以减少大型项目的调试信息的大小.
此外,由于调试信息可能会变得非常大,在"关闭"的情况下,编译器会起一些技巧来保持调试大小的可管理性.例如,clang只将已使用的类型发送到调试信息中,因此如果程序中没有人使用某个模块的类型,则不会获得该类型的调试信息.这通常不是一个大问题,因为如果你从不在代码中使用某种类型,那么你在调试中就不太可能使用它.但它有时会导致问题.
它也不会为您的程序使用但未定义的函数发出签名信息.这就是为什么你最终必须在"print"命令中的表达式中转换返回类型,而不必在代码中强制转换.
OTOH,当它"打开"时,由于编译器知道它只需要生成一次这个信息,它可以更完整地发出它的内容.
对于Objective C,您可以通过运行来处理来自您正在使用的模块的任何缺失类型/函数签名:
(lldb) expr @import "FrameworkWhoseTypesOrSignaturesYouWant"
Run Code Online (Sandbox Code Playgroud)
在调试会话开始时.
| 归档时间: |
|
| 查看次数: |
2514 次 |
| 最近记录: |