尝试进入AFNetworking代码会生成以下警告:
[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.
当然,我无法调试代码。具体而言,我试图调试似乎不可能的UIImageView+AFNetworking
类别。更改代码没有任何效果(尝试NSLog
等),当尝试进入编译器时转到汇编代码并显示UIImageView+TVASTAFNetworking
作为类别名称,这在代码库中的任何地方都不存在。
使用Xcode 7. iOS 9& 8. Cocoapods(无框架)
更新
我忘了提到Optimizer被设置为none
用于发布和调试配置,我实际上使用Debug
config。
更新2
Strip Debug Symbols
也关闭了。
答案 0 :(得分:149)
如果您的项目使用Swift,则有两个独立的"优化级别"项目/目标配置中的设置。
确保正确设置它们:
答案 1 :(得分:109)
您的项目似乎处于发布模式。发布模式通过大量优化来编译应用程序,但调试器讨厌优化,因此为了可靠地调试应用程序,您需要将其切换到调试模式,这会减少优化并添加一堆调试信息。要将其切换到调试模式:
答案 2 :(得分:49)
此警告仅在您点击断点并且源位于启用了优化的项目中时出现,从而阻止您观看实际变量值(每个对象显示为nil,即使它不是)
在我的情况下,它只发生在逐步调试cocoapod依赖时。
因此,即使您正确设置了主要目标和项目设置(条带调试符号= OFF,优化级别为无),您也需要确保它与您点击断点的Pod项目相同。
答案 3 :(得分:13)
事实证明,在将旧项目(Xcode 7.x +)导入新的Xcode 8.3(8E162)后,可能由于编译器优化, Swift编译器 - 优化级别默认设置为< strong>快速,单文件优化:
将其更改为无,解决了问题:
答案 4 :(得分:11)
答案 5 :(得分:8)
这是我的解决方案......
按照gimino的回答,如果您使用的是cocoapods,请在Podfile中添加这样的一行:
xcodeproj 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug
或cocoapods版本&gt; = 1.0(感谢Diejmon)
project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug
MyProject除了标准的'Debug'之外还有'Debug - local','Debug - staging','Debug - PRODUCTION'作为调试配置
默认情况下,cocoapods通常会生成pod配置为Release,这个Podfile行允许你告诉它们是调试。
答案 6 :(得分:7)
我今天遇到了同样的问题,并且弄明白了(至少在我的情况下)。 我也使用CocoaPods,运行我的测试目标时遇到了这个问题(Swift与ObjC混合)。
我正在使用Xcode 7.2,iOS 9.2 SDK。
在下图中,您可以在我的更改之前看到目标和项目的优化:
令人惊讶的是,即使已解决的优化是无[-O0] ,只有在将项目设置从 -Os 更改为 -O0 <之后/ strong>编译器是否停止优化目标。
下面你可以看到我的最终设置:
答案 7 :(得分:6)
已经很久了,但我终于解决了这个问题。有第三个优化标记LTO
或Link Time Optimization
,令人惊讶的是没有人
在这里提到它,由于某种原因我也没有注意它。它位于Optimization Level
设置之上,您可以在此处发布的许多屏幕截图中看到。
总而言之,您需要关闭3个不同的优化标志进行调试:
-flto
)-O
)有关LTO的更多信息: http://llvm.org/docs/LinkTimeOptimization.html
答案 8 :(得分:1)
您确定您的调试配置不会优化代码(它不应该)吗?看起来您不小心为调试配置启用了优化,您应该将其从目标设置中关闭。
答案 9 :(得分:0)
这个错误发生在我身上两次,并且在每种情况下都是用于请求服务的URL参数中的错误。 在一种情况下,URL在端口部分中有一些空间,在另一种情况下,某些可选值未被解包。
所以修复是为了确保请求的url格式正确。有关我的案例的更多信息,以及类似的报告here。
答案 10 :(得分:0)
这可能是一个过分的简化,但是您是为Release还是针对优化(从Swift或LLVM中删除符号)而构建的?如果是这样,请编辑方案并切换到“调试”,或将“构建设置”的Swift或LLVM优化编辑为“无(0)”。
答案 11 :(得分:0)
即使在调试内部使用C库的pod的过程中遇到了这个问题,除了线程中列出的所有其他内容之外,您还必须在项目设置中进行其他更改才能使其正常工作。
转到Pods项目设置->您的C使用目标->构建设置-> Apple Clang-自定义编译器标志->其他C标志,并以某种方式删除-O3
标志。
答案 12 :(得分:0)
如果您需要为Swift容器禁用优化功能,以便对其进行调试,请将以下内容添加到this
中。这将仅对调试版本禁用优化。
RenderItem