gpt4 book ai didi

ios - 关闭 CLANG_ENABLE_MODULE_DEBUGGING 结果

转载 作者:可可西里 更新时间:2023-11-01 03:48:44 25 4
gpt4 key购买 nike

为了解决 xcode 7.3 中的一个 apple 错误,即 xcode 在遇到某些断点时崩溃,我们需要关闭 CLANG_ENABLE_MODULE_DEBUGGING 或继续使用 xcode 7.2。关闭 CLANG_ENABLE_MODULE_DEBUGGING 听起来不错。

在典型的 iOS 开发人员工作环境中无法调试 CLang 模块究竟意味着什么?如何知道哪些 CLang 模块被直接或间接依赖?

这里是关于爆炸问题的讨论:https://forums.developer.apple.com/message/126468#126468

了解 CLang 模块并调试它们

这是一个 Introduction to Objective-C Modules

来自另一个标题为 Apple Releases Xcode 7 Beta 的来源:

Clang modules and precompiled headers for C, C++, Objective-C, and Objective-C++ contain debug information for the types they define. When building with the Xcode setting CLANG_ENABLE_MODULE_DEBUGGING=YES (enabled by default), clang stores references to the types

我看到我们的几个 Cocoa Pods 使用 @import,这似乎是相关的。

关闭此功能后我们看不到的调试信息的典型示例是什么?

最佳答案

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

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

因此将此“打开”可以减少大型项目的调试信息的大小。

此外,由于调试信息可能会变得相当大,在“关闭”的情况下,编译器会采取一些技巧来保持调试大小可控。例如,clang 仅将使用过的类型发送到调试信息中,因此如果程序中没有人使用某个模块中的某个类型,您将不会获得该类型的调试信息。这通常不是一个大问题,因为如果您从不在代码中使用某种类型,您就不太可能在调试中使用它。但它有时会引起问题。

它也不会为您的程序使用但未定义的函数发出签名信息。这就是为什么您最终不得不在“print”命令的表达式中强制转换您不必在代码中强制转换的返回类型。

OTOH,当它“打开”时,因为编译器知道它只需要生成一次此信息,所以它可以更完整地说明它发出的内容。

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

(lldb) expr @import "FrameworkWhoseTypesOrSignaturesYouWant"

在调试 session 开始时。

关于ios - 关闭 CLANG_ENABLE_MODULE_DEBUGGING 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36265490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com